C#のMVC5(A)

:MVC5初期

1:一般MVC(モデル - ビュー - コントローラ):

Vは、インタフェースです。

そしてMは、論理的なデータです。

CはM、およびVに連結され、コントロールです。

プログラミングモードがデザインされ、することができます効果的に分離インターフェースとビジネス

 

2:狭いMVC、Web開発フレームワークです

V -ビューのビューは、ユーザーがコンテンツの見ている
Cを---コントローラは、論理計算を呼び出し、アクションを表示するユーザーを決める
M -モデルのデータ転送モデル、共通のエンティティを

 

2:新しいMVCのVisual Studioの種類

1:右新規プロジェクト

2:ウェブでAsp.net Webアプリケーションを選択します

3:あなたは空のMVCに選択しますが、MVCをフックすることを確認することができます。この時間は、空のMVCを生成します。この時、あなたはまた、MVCプロジェクト、小切手上の次のチェックボックスまたはデフォルトを選択することができますほかには、これが生成されます。デフォルトで生成されるMVCプロジェクトを初期化し、そしてなど、controllの一部を表示し、あなたが直接プレビューすることができます。あなたがかもしれ自分の好みに合わせてお選び特定のどの方法。

または、次のように:

この時点で、MVCプロジェクトが正常に作成された以下のように、新しいMVCプロジェクトが構成されています。

 

3:MVCプロジェクトのプレビュー

ちょうど+ビューコントローラの名前を命名、図のように:MVC新しく作成されたプロジェクトは、閲覧デフォルトの設定になります。

閲覧ちょうどその時:HTTPを:// localhostを:59596 /ホーム/について  この方法がアクセスできます。

1:なぜ、デフォルトルートに依存するようなルールがある、すなわちは: 

私たちが見ることができるオープンソースのコードは、デフォルトの設定があります:

デフォルトの入力がない場合になります:ホーム/インデックスこのページを

2:あなたが私たちのプロジェクトのURLアドレスを設定する必要がある場合はその答えが正しいか変更するだけでなく、ここにあります。我々はいくつかの例を与えます:

 1  public class RouteConfig
 2     {
 3         public static void RegisterRoutes(RouteCollection routes)
 4         {
 5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 6             //忽略路由  正则表达式  {resource}表示变量   a.axd/xxxx   resource=a   pathInfo=xxxx
 7             //.axd是历史原因,最开始都是webform,请求都是.aspx后缀,IIS根据后缀转发请求;MVC出现了,没有后缀,IIS6以及更早版本,打了个补丁,把mvc的请求加上个.axd的后缀,然后这种都转发到网站----新版本的IIS已经不需要了,遇到了就直接忽略,还是走原始流程
 8             routes.IgnoreRoute("CustomService/{*pathInfo}");//以CustomService开头,都不走路由
 9 
10             routes.MapRoute(
11                 name: "About",
12                 url: "About",
13                 defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional }
14                 );//固定路由,/Home/About----About
15 
16             routes.MapRoute(
17                name: "Test",
18                url: "Test/{action}/{id}",
19                defaults: new { controller = "Second", action = "Index", id = UrlParameter.Optional }
20                );//修改控制器,如果以Test开头的,则一定指的是Second控制器
21 
22             routes.MapRoute(
23               name: "Regex",
24               url: "{controller}/{action}_{year}_{month}_{day}",
25               defaults: new { controller = "Second", action = "Index", id = UrlParameter.Optional },
26               constraints: new { year = @"\d{4}", month = @"\d{2}", day = @"\d{2}" }
27               ); //正则匹配,默认控制器是Second,action是Index;year,month,day必须按照一定的正则方式去匹配,如果匹配不上,则直接找不到!
28           
29             //常规路由,一般来说,我们不怎么扩展这个路由
30             routes.MapRoute(
31                 name: "Default",//路由名称,RouteCollection是key-value,key 避免重复
32                 url: "{controller}/{action}/{id}",//正则规则:两个斜线 3个变量
33                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
34             );
35 
36         }
37     }
View Code

注意:路由是按照注册顺序进行匹配,遇到第一个吻合的就结束匹配;每个请求只会被一个路由匹配上

 

四:controller与view之间传值,目前通用的有四种方式 

 1  private List<CurrentUser> _UserList = new List<CurrentUser>()
 2  {
 3      new CurrentUser()
 4      {
 5          Id=1,
 6          Name="青青",
 7          Account="Administrator",
 8          Email="[email protected]",
 9          LoginTime=DateTime.Now,
10          Password="123456"
11      },
12      new CurrentUser()
13      {
14          Id=2,
15          Name="琪琪",
16          Account="Administrator",
17          Email="[email protected]",
18          LoginTime=DateTime.Now,
19          Password="123456"
20      },
21      new CurrentUser()
22      {
23          Id=3,
24          Name="可可",
25          Account="Administrator",
26          Email="[email protected]",
27          LoginTime=DateTime.Now,
28          Password="123456"
29      },
30  };
31 
32  // GET: First
33  /// <summary>
34  ///  测试ViewData,ViewBag,TempData,model传值
35  /// </summary>
36  /// <param name="id"></param>
37  /// <returns></returns>
38  public ActionResult Index(int id = 3)
39         {
40             CurrentUser currentUser = this._UserList.FirstOrDefault(u => u.Id == id)
41                 ?? this._UserList[0];
42             
43             base.ViewData["CurrentUserViewData"] = this._UserList[0];
44             base.ViewBag.CurrentUserViewBag = this._UserList[1];
45 
46             base.ViewData["TestProp"] = "cx";
47             base.ViewBag.TestProp = "Tenk";
48             base.TempData["TestProp"] = "Spider";//独立存储
49 
50             base.TempData["CurrentUserTempData"] = currentUser;
51 
52             if (id == 1 || id == 2 || id == 3)
53             {
54                 return View(this._UserList[2]); //model传值,主要适合复杂数据的传递,强类型
55             }
56             else if (id < 10)
57             {
58                 //同Action传值
59                 return View("~/Views/First/Index2.cshtml");
60             }
61             else
62             {
63                 //跨Action
64                 return base.RedirectToAction("TempDataShow");
65             }
66         }
67  public ActionResult TempDataShow()
68  {
69      return View();
70  }
View Code

1:使用viewBag

查看定义后发现:这是个动态类型,可以传任何值,如:

然后页面直接调用:

 因为是动态类型,所以使用的时候不需要强制转换,直接可以拿来使用,

2:使用viewData

查看定义这个是个字典类型,是通过键值对来传的,比如:

使用的时候,需要强制转换一下:

3:使用TempData

这个也是字典类型,是通过键值对来传递数据,但是通过点击会弹出:从一个请求保持到下一个请求的数据集,这就是跟viewBag和viewData的不同之处,这个是可以跨Action来传递的,即是不同的Action可以通过这个来传递,但是仅仅能使用一次,用完就会清除掉。

定义的同viewData:

使用的时候也需要强制转换一下:

4:model

因为view是继承于ViewResultBase的,所以可以通过Model来传至

Controller传值只需要在view中传递值即可,如:

前端接收是使用Model来接收的如下:

以上是四种传值方式,不过最通用的就是Model来传,如果想要一次性传到页面多个属性,可以使用一个新的类把所有的属性集成起来一起传。

注意:

1:viewData跟ViewBag如果是相同的属性,则会覆盖,以最后一个为主。

2:TempData--临时数据,可以跨action后台传递,存在session里面,用一次就清理掉

 

おすすめ

転載: www.cnblogs.com/loverwangshan/p/11053257.html