上一篇 ASP.NET MVC3 中,大概介紹了下 Razor 中的布局,今天我們看看 ASP.NET MVC3 中的增加、修改和删除操作。我們以一個留言的小例子來說明下,本篇主要内容就是在 ASP.NET MVC3 Razor 布局下實作增、删、改操作以及實體資料的異步驗證。
首先,我們再建立一個表,名字命名為"Contact",打開"AndroidDB.edmx"檔案,右鍵選擇"從資料庫更新模型"。這個前邊已經介紹過,這裡就不多說,這樣在實體層就建立了"Contact"類及它的屬性。接下來,我們新添加一個名為"ContactController"的控制器類,用來顯示我們的留言表單并實作留言功能。我們先看看Controller中的代碼,如下:
public class ContactController : Controller
{
Android.Models.AndroidEntities android = new AndroidEntities();
//
// GET: /Contact/
public ActionResult Create()
{
return View();
}
//
// POST: /Contact/Create
[HttpPost]
public ActionResult Create(Contact contact)
{
if (ModelState.IsValid)
{
android.AddObject("Contact", contact);
android.SaveChanges();
return RedirectToAction("../Home");
}
else
{
return View(contact);
}
}
}
上邊這些代碼就是 Controller 中所需的所有代碼了,非常簡潔,是吧?需要說明的2點是:1.[HttpPostAttribute]表明了隻有當表單送出方式為"Post"時,才執行第二個方法,其他情況下執行第一個Create()方法。2.我們使用類 ObjectContext 的方法AddObject()方法進行添加操作,參數分别是屬性名和實體,AddToContact()這種方法現在已經棄用了,這點我們需要注意下。關于使用ObjectSet屬性可以參考下ASP.NET MVC3 執行個體(三) 使用 Controller 進行資料的的查詢。
接下來我們添加 View 模闆,用來展示留言表單,在Create()方法上右鍵單擊,Add View,如下圖:

我們分别選擇了 View data class 為"Contact",模闆為"Create",得到如下的 View:
@model Android.Models.Contact
<body>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Contact</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Website)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Website)
@Html.ValidationMessageFor(model => model.Website)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Content)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Content,5,60,"Content")
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
</body>
這種寫法在 ASP.NET MVC 2 裡就已經有了,并沒有太多可說的,它使用強類型的 HtmlHelper 方法輸出相應的 HTML 的标記。看留言内容那裡,可知我們可以定義輸入框的大小和ID(Name),非常友善。到這裡,我們就已經完成了 ASP.NET MVC 3 中的添加操作。當使用者點選"Create"按鈕時,表單中的資料會自動正确的賦給對應的屬性。
我們要時刻記得“使用者的輸入是邪惡的”,這樣我們要對使用者的輸入進行必要的驗證。實體層資料驗證的改進也是 MVC 3 中的一大亮點。@Html.ValidationSummary(true)表明我們已經啟用了用戶端的異步驗證,很明顯這樣可以減少不必要的伺服器請求,MVC3中微軟全面使用 jQuery 進行用戶端的驗證。
ASP.NET MVC3中實體資料的驗證是非常簡單的,業務邏輯分離的非常好,如在驗證留言内容時,隻需添加如下代碼:
[Required(ErrorMessage="不能為空")]
[StringLength(1000, ErrorMessage = "長度在5-1000", MinimumLength = 5)]
public global::System.String Content
{
get
{
return _Content;
}
set
{
OnContentChanging(value);
ReportPropertyChanging("Content");
_Content = StructuralObject.SetValidValue(value, true);
ReportPropertyChanged("Content");
OnContentChanged();
}
}
分别驗證了必填和長度兩個屬性,還有很多屬性,我們就不做一一介紹了。最後看下結果,如下:
看來本篇隻能介紹下 ASP.NET MVC3 中的添加操作了,修改和删除操作非常類似,我會補上。發表一篇文章确實很花時間,總是感覺有些地方說的不夠明白,希望大家支援!