標籤: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 @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:原始碼下載
親...有點不好意思.這節的代碼示範沒那麼多...
本文已結束,感謝各位觀眾!