ASP.NET MVC3 系列教程 - 模型

來源:互聯網
上載者:User

標籤:des   c   class   blog   a   http   

I:基礎綁定的實現

1.在前面的兩篇基礎文章(路由 及 控制器&視圖)當中,還沒對QueryString的綁定進行介紹,因為我覺得它更適合放在這一章節中去介紹.我們在用WebForm去開發的時候,有時候會利用到QueryString去做一些功能如:http://localhost/First/QueryString.aspx?Sort=Desc,在MVC中,它的實現有兩種方式:

控制器代碼

public class QueryStringController : Controller{    public ActionResult First()    {        ViewBag.Sort = Request.QueryString["Sort"];        return View();    }    public ActionResult Second(string sort)    {        ViewBag.Sort = sort;        return View();    }}

視圖代碼:

@* First.cshtml *@@{    ViewBag.Title = "使用 QueryString 之一";}<h2>@ViewBag.Title</h2><p>Sort = @ViewBag.Sort</p>
@* Second.cshtml *@@{    ViewBag.Title = "使用 QueryString 之二";}<h2>@ViewBag.Title</h2><p>Sort = @ViewBag.Sort</p>

對於訪問~/QueryString/First?Sort=Desc, ~/QueryString/Second?Sort=Desc的運行結果:
 

2.原理:

在控制器的操作方法內定義的參數,ASP.NET MVC3會根據Request.Form, Request.QueryString, RequestContext.RouteData.RouteValues去進行綁定.注意:但不會對Cookies的集合去進行綁定.

 
測試結果

控制器代碼:

public class BindController : Controller{    public ActionResult CookieTest(string c1)    {        c1 = string.IsNullOrWhiteSpace(c1)  "c1 為空白" : "c1 = " + c1;        ViewBag.C1 = c1;        return View();    }    public ActionResult FormTest()    {        return View();    }    [HttpPost]    public ActionResult FormTest(string inputText)    {        ViewBag.Msg = inputText;        return View();    }}

視圖代碼:
CookieTest.cshtml

@{    ViewBag.Title = "Cookies Bind Test";    var cookiesCount = Request.Cookies.Count;}<h2>@ViewBag.Title</h2><p>@ViewBag.C1<br /><br />Request Cookies集合:<br />@for (int i = 0; i < cookiesCount; i++){  var cookie = Request.Cookies[i];  @: @cookie.Name&nbsp;&nbsp;@cookie.Value<br />}</p>

FormTest.cshtml

@{    ViewBag.Title = "Form Test";}<h2>@ViewBag.Title</h2><form action="FormTest" method="post">  <input name="inputText" type="text" /><br />  <input type="submit" value="提交" /></form>@if (ViewBag.Msg != null){  <p>你輸入了: @ViewBag.Msg</p>}
II:模型的介紹

1.模型的引入

在前一章中,我們已經瞭解了綁定的一些基礎,在此或許你會有疑問,如果對自訂類型進行綁定的話是否需要寫以下的類似語句:
MyEntity的定義:

public class MyEntity{    public int Id { get; set; }    public string Name { get; set; }}

錯誤的操作方法:

public ActionResult Entity_Error(int? Id, string Name){    MyEntity entity = new MyEntity()    {        Id = Id ?? -1,        Name = Name    };    ViewBag.Entity = entity;    return View();}

而正確的做法完全可以使用:

public ActionResult Entity_Error(MyEntity entity){    ViewBag.Entity = entity;    return View();}

這裡不需要擔心entity參數的命名.運行結果:

2.Ok,在上面的初步介紹之後,我們已經瞭解了ASP.NET MVC3的預設綁定了,在此先提示一下,MVC的綁定完全可以自訂實現.當然這個話題我將會放到 [ASP.NET MVC3 進階經驗技巧] 主題中去講解.

3.Form綁定注意.

其實在<input type=”xx” id=”{id}” name=”{name}” />標籤中, ASP.NET MVC3僅僅檢測{name}而不會去檢測{id}所以,大家都知道在HTML規範當中.一個Document內每一個帶{id}的標籤都必須約束為唯一.而對於數組/集合的綁定{name}僅需定義為[].xxx或[索引鍵].xxx即可,這樣當你在做到類似的應用時這部分的知識對你來說是非常重要的.

4.從MVC的角度去看待Model.

III:原始碼下載

親...有點不好意思.這節的代碼示範沒那麼多...




本文已結束,感謝各位觀眾!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.