ASP.NET MVC 入門7、Hellper與資料的提交與繫結
本系列文章基於ASP.NET MVC Preview5.
ASP.NET MVC提供了很多Hellper的方法,Hellper就是一些生成HTML程式碼的方法,方便我們書寫HTML程式碼(有一部分的朋友更喜歡直接寫HTML程式碼)。我們也可以利用.NET 3.5的擴充套件方法來書寫我們自己的Hellper。
例如:
<%=Html.ActionLink("首頁","index","Home")%>生成的HTML程式碼就是:<a href="/Home/Index">首頁</a>。這裡有一點需要注意的就是,Html.ActionLink()和Url.Link()方法生成的URL和你在Global.asax裡面配置的Route的先後順序是有關的
具體的關於Hellper的各個方法的使用我就不詳細介紹了,你可以參考重典的Asp.net Mvc Framework 系列文章。
我們來實現前面提到的Setting,用於設定Blog的基本設定。我們看一下在Views/Admin/Setting.aspx頁面的程式碼:
<p><label for="Name">Blog的名稱</label><%=Html.TextBox("Name")%><%=Html.ValidationMessage("Name")%></p><p><label for="Description"我們的Setting Action方法是這樣寫的:
注意我們是return View(BlogSettings.Instance);給ViewData.Model傳遞了BlogSettings.Instance。然後執行一下看看:
注意到上面的TextBox都有值了麼?我們使用了Html.TextBox("Name")而已,並沒有指定值啊?那麼這個值是怎麼自動的繫結上去的呢?注意到前面在Action中我們是return View(BlogSettings.Instance);給ViewData.Model傳遞了BlogSettings.Instance,BlogSettings.Instance.Name和Html.TextBox("Name")的引數"Name"同名,Html.TextBox()方法在呼叫的時候會呼叫ViewData.Eval()方法,所以就自動把值繫結上去了。和前一篇文章說過的ViewData.Eval()可以使用"."表示式一樣,Html.TextBox()也同樣可以使用"."表示式,例如:Html.TextBox("Post.Title")也可以自動繫結ViewData.Model.Post.Title值上去。
下面我們來將值提交到Action中並儲存。我們的Form使用了Post回伺服器:
<form id="fields" action="<%=Url.Action("Setting","Admin")%>" method="post">然後我們在Action中進行處理:
[ActionName("Setting"), AcceptVerbs("POST")]public ActionResult SaveSetting()
{
//當然你可以這樣取值
//string name = Request.Form["Name"];
//但我們有更簡便的:try
{
UpdateModel(BlogSettings.Instance, new[] { "Name", "Description", "PostsPerPage" });
}
catch
{
return View(BlogSettings.Instance);
}
//在這裡你可能還需要對自定義的業務邏輯進行驗證
BlogSettings.Instance.Save();
return ShowMsg(new List<string>() { "修改設定成功" });
}
如上程式碼所示,我們可以使用UpdateModel()方法直接對Post到伺服器來的Form表單的值賦給指定的物件。對於提交的資料進行業務邏輯的驗證這裡要討論的還是比較多的,國外也有不少文章討論這個的,大家可以搜尋看看。
暫時就寫這麼多吧,想到什麼再補充。Enjoy!Post by Q.Lee.lulu。
---------------------------------------------------------------------