MVC里面的強類型視圖的確是一個很強大的東西,結合EF(Entity Framework)的話更加強大,可以直接把你的數據庫直接生成強視圖的增刪查改的視圖,在視圖中所有Model的屬性均動態的,我們不必知道它實際的類型,而且又很容使用@的模型關鍵字來表示模型的類型名稱。
這里的這個類是我自己在新建ViewModel下的一個普通的的類,可以使用EF從數據庫生成的類,不過考慮到我的表里面有一些虛擬外鍵屬性,就必須要有個ViewModel來專門生成視圖,都一樣,其實意思就是我們必須要先有個模型model,比如我上面這個模型。
然后接下來:就是添加視圖,在指定位置,這個我不細說了。
在上面的我選擇了強類型視圖,模型類中的就是我剛剛創建的類,支架模板里面有很多模板,有Empty,Details,Edit,Delete,Create,List,這里我選擇了Edit,也就是用來編輯我數據庫中的記錄,然后你就會發現強大的地方來了,MVC自動按照你的要求生成了一個適合你那個數據表的編輯模板,里面也把所有的信息都添加了可編輯的模板
ps:如果這個類是你剛剛創建的話需要去重新生成一下項目才能在模型類中找到它
其中上面這個@model MODEL.ViewModel.Admin正是來告訴視圖,這個視圖的model屬性到底是個什么屬性,然后便可以通過控制器傳過來的模型分別的填充下面的強類型空缺

@model MODEL.ViewModel.Admin @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>EditAdmin</title> </head> <body> <script src="~/Scripts/jquery-1.8.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> @using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.ValidationSummary(true) <fieldset> <legend>Admin</legend> @Html.HiddenFor(model => model.Id) <div class="editor-label"> @Html.LabelFor(model => model.LoginName) </div> <div class="editor-field"> @Html.EditorFor(model => model.LoginName) @Html.ValidationMessageFor(model => model.LoginName) </div> <div class="editor-label"> @Html.LabelFor(model => model.Number) </div> <div class="editor-field"> @Html.EditorFor(model => model.Number) @Html.ValidationMessageFor(model => model.Number) </div> <div class="editor-label"> @Html.LabelFor(model => model.Password) </div> <div class="editor-field"> @Html.PasswordFor(model => model.Password) @Html.ValidationMessageFor(model => model.Password) </div> <div class="editor-label"> @Html.LabelFor(model => model.Remark) </div> <div class="editor-field"> @Html.EditorFor(model => model.Remark) @Html.ValidationMessageFor(model => model.Remark) </div> @*<div class="editor-label"> @Html.LabelFor(model => model.Json) </div> <div class="editor-field"> @Html.EditorFor(model => model.Json) @Html.ValidationMessageFor(model => model.Json) </div>*@ <div class="editor-label"> @Html.LabelFor(model => model.DepartmentId) </div> <div class="editor-field"> @Html.DropDownListFor(model => model.DepartmentId, ViewBag.departmentList as IEnumerable<SelectListItem>) @Html.ValidationMessageFor(model => model.DepartmentId) </div> @*<div class="editor-label"> @Html.LabelFor(model => model.BaseInfo) </div> <div class="editor-field"> @Html.EditorFor(model => model.BaseInfo) @Html.ValidationMessageFor(model => model.BaseInfo) </div>*@ <p> <input type="submit" value="Save" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div> </body> </html>
如果這個時候傳給視圖的模型是空的,也就是為null值,那么打開edit頁面的時候里面的值也相應為空白,然后我通過EF簡單的從數據庫查到了一條數據,並把其轉化為ViewModel傳給了視圖。代碼如下
//根據id 查詢要修改的權限 var model = OperateContext.Iqgzx_adminBLL.GetListBy(x => x.Id == id).FirstOrDefault().ToViewModel(); //將權限對象 傳給視圖的model屬性 return PartialView(model);
顯示的效果如下: