目錄
系列文章
[Asp.net MVC]Asp.net MVC5系列——第一個項目
[Asp.net MVC]Asp.net MVC5系列——添加視圖
[Asp.net MVC]Asp.net MVC5系列——添加模型
[Asp.net MVC]Asp.net MVC5系列——從控制器訪問模型中的數據
概述
上篇文章介紹了如何通過控制器訪問模型中的數據,在本節中我們將要在數據庫中追加並保存一些數據。我們將要創建一個表單以及一些表單輸入控件,用來輸入數據信息。當用戶提交表單時將把這些用戶輸入的信息保存在數據庫中。我們可以通過在瀏覽器中輸入“http://localhost:xx/Student/Create”這個URL地址來訪問這個表單。
顯示添加數據時所用表單
首先,我們需要在我們的StudentController類中追加一個Create方法,該方法返回一個視圖,該視圖中包含了用戶輸入信息時所要用到的表單。
1 public ActionResult Create() 2 { 3 return View(); 4 }
現在讓我們來實現這個Create方法中所要返回的視圖,我們將在這個視圖中向用戶顯示追加數據時所需要用到的表單。在Create方法中點擊鼠標右鍵,並點擊上下文菜單中的“添加視圖”。
在“添加視圖”對話框中將模型類指定為“Student”,在支架模板中選擇Create,如圖所示。
點擊添加按鈕,Views文件夾下的Student文件夾中將會自動添加一個名為“Create.cshtml”的視圖模板文件。因為你在支架模板中選擇了“Create”,所以支架模板會在該視圖模板文件中自動生成一些默認代碼。打開該文件進行查看,在該文件中已經自動創建了一個HTML表單,以及一段用來顯示校驗時錯誤信息的文字。Visual Web Developer檢查Student類,並自動創建與該類中每個屬性相對應的<label>元素以及<input>元素。支架模板自動生成的創建數據所用視圖中的代碼。
1 @model Wolfy.FirstMVCProject.Models.Student 2 3 @{ 4 Layout = null; 5 } 6 7 <!DOCTYPE html> 8 9 <html> 10 <head> 11 <meta name="viewport" content="width=device-width" /> 12 <title>Create</title> 13 </head> 14 <body> 15 @using (Html.BeginForm()) 16 { 17 @Html.AntiForgeryToken() 18 19 <div class="form-horizontal"> 20 <h4>Student</h4> 21 <hr /> 22 @Html.ValidationSummary(true) 23 24 <div class="form-group"> 25 @Html.LabelFor(model => model.stuName, new { @class = "control-label col-md-2" }) 26 <div class="col-md-10"> 27 @Html.EditorFor(model => model.stuName) 28 @Html.ValidationMessageFor(model => model.stuName) 29 </div> 30 </div> 31 32 <div class="form-group"> 33 @Html.LabelFor(model => model.stuSex, new { @class = "control-label col-md-2" }) 34 <div class="col-md-10"> 35 @Html.EditorFor(model => model.stuSex) 36 @Html.ValidationMessageFor(model => model.stuSex) 37 </div> 38 </div> 39 40 <div class="form-group"> 41 @Html.LabelFor(model => model.stuBirthdate, new { @class = "control-label col-md-2" }) 42 <div class="col-md-10"> 43 @Html.EditorFor(model => model.stuBirthdate) 44 @Html.ValidationMessageFor(model => model.stuBirthdate) 45 </div> 46 </div> 47 48 <div class="form-group"> 49 @Html.LabelFor(model => model.stuStudydate, new { @class = "control-label col-md-2" }) 50 <div class="col-md-10"> 51 @Html.EditorFor(model => model.stuStudydate) 52 @Html.ValidationMessageFor(model => model.stuStudydate) 53 </div> 54 </div> 55 56 <div class="form-group"> 57 @Html.LabelFor(model => model.stuAddress, new { @class = "control-label col-md-2" }) 58 <div class="col-md-10"> 59 @Html.EditorFor(model => model.stuAddress) 60 @Html.ValidationMessageFor(model => model.stuAddress) 61 </div> 62 </div> 63 64 <div class="form-group"> 65 @Html.LabelFor(model => model.stuEmail, new { @class = "control-label col-md-2" }) 66 <div class="col-md-10"> 67 @Html.EditorFor(model => model.stuEmail) 68 @Html.ValidationMessageFor(model => model.stuEmail) 69 </div> 70 </div> 71 72 <div class="form-group"> 73 @Html.LabelFor(model => model.stuPhone, new { @class = "control-label col-md-2" }) 74 <div class="col-md-10"> 75 @Html.EditorFor(model => model.stuPhone) 76 @Html.ValidationMessageFor(model => model.stuPhone) 77 </div> 78 </div> 79 80 <div class="form-group"> 81 @Html.LabelFor(model => model.stuIsDel, new { @class = "control-label col-md-2" }) 82 <div class="col-md-10"> 83 @Html.EditorFor(model => model.stuIsDel) 84 @Html.ValidationMessageFor(model => model.stuIsDel) 85 </div> 86 </div> 87 88 <div class="form-group"> 89 @Html.LabelFor(model => model.stuInputtime, new { @class = "control-label col-md-2" }) 90 <div class="col-md-10"> 91 @Html.EditorFor(model => model.stuInputtime) 92 @Html.ValidationMessageFor(model => model.stuInputtime) 93 </div> 94 </div> 95 96 <div class="form-group"> 97 @Html.LabelFor(model => model.Course.classId, "stuClass", new { @class = "control-label col-md-2" }) 98 <div class="col-md-10"> 99 @Html.DropDownList("class", String.Empty) 100 @Html.ValidationMessageFor(model => model.classId) 101 </div> 102 </div> 103 104 <div class="form-group"> 105 <div class="col-md-offset-2 col-md-10"> 106 <input type="submit" value="Create" class="btn btn-default" /> 107 </div> 108 </div> 109 </div> 110 } 111 112 <div> 113 @Html.ActionLink("Back to List", "Index") 114 </div> 115 </body> 116 </html>
這段代碼中使用了幾個HTML輔助類的方法來幫助簡化HTML標簽的書寫方法。
Html.LabelFor輔助器用於顯示字段名(”Title”,”ReleaseDate”,”Genre”或者”Price”)。
Html.EditorFor輔助器用於顯示一個提供給用戶輸入信息的HTML的<input>元素。
Html.ValidationMessageFor輔助器用於顯示一個針對屬性的校驗信息。
請注意我們的視圖模板的頂部有一個“@model Wolfy.FirstMVCProject.Models.Student”的聲明,該聲明將我們的視圖模板中的“模型”強類型化成一個Student類。
然后我們右鍵在瀏覽器中查看Create.cshtml。
為什么會出現這個錯誤,因為學生表中存在班級id這個外鍵,在綁定下拉列表的時候沒有指定數據源。從該錯誤信息,我們將學習ViewData的基本用法。
獲取或設置一個字典,其中包含在控制器和視圖之間傳遞的數據。
控制器可以向視圖數據添加鍵/值對。 然后,這些數據將在呈現視圖時傳遞給視圖。 視圖可以添加或更改數據,當視圖作為請求的一部分發布時,這些數據將發送到控制器。
說的有點拗口,可以通過鍵值對的形式為ViewData賦值,然后在視圖中可以使用ViewData.
那么我們修改上面的bug,作為實例代碼:
1 public ActionResult Create() 2 { 3 var courses = from s in entity.Course 4 select s; 5 List<SelectListItem> items = new List<SelectListItem>(); 6 foreach (var item in courses) 7 { 8 SelectListItem selectListItem = new SelectListItem() { Text = item.className, Value = item.classId.ToString() }; 9 items.Add(selectListItem); 10 } 11 ViewData["class"] = items; 12 return View(); 13 }
而下面的代碼中的“class”為ViewData的鍵,下拉框根據鍵值取對應的值(簡單了解,后面將詳細講解ViewData,ViewBag)。
@Html.DropDownList("class", String.Empty)
有興趣的可以看看DropDownList代碼:

1 #region 程序集 System.Web.Mvc.dll, v5.0.0.0 2 // F:\AspdotNet\Wolfy.FirstMVCProject\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll 3 #endregion 4 5 using System; 6 using System.Collections.Generic; 7 using System.Linq.Expressions; 8 using System.Runtime.CompilerServices; 9 using System.Web.Mvc; 10 11 namespace System.Web.Mvc.Html 12 { 13 // 摘要: 14 // 表示支持在列表中進行選擇。 15 public static class SelectExtensions 16 { 17 // 摘要: 18 // 通過使用指定的 HTML 幫助器和窗體字段的名稱,返回單選 select 元素。 19 // 20 // 參數: 21 // htmlHelper: 22 // 此方法擴展的 HTML 幫助器實例。 23 // 24 // name: 25 // 要返回的窗體字段的名稱。 26 // 27 // 返回結果: 28 // 一個 HTML select 元素。 29 // 30 // 異常: 31 // System.ArgumentException: 32 // name 參數為 null 或為空。 33 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name); 34 // 35 // 摘要: 36 // 通過使用指定的 HTML 幫助器、窗體字段的名稱和指定列表項,返回單選 select 元素。 37 // 38 // 參數: 39 // htmlHelper: 40 // 此方法擴展的 HTML 幫助器實例。 41 // 42 // name: 43 // 要返回的窗體字段的名稱。 44 // 45 // selectList: 46 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 47 // 48 // 返回結果: 49 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 50 // 51 // 異常: 52 // System.ArgumentException: 53 // name 參數為 null 或為空。 54 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList); 55 // 56 // 摘要: 57 // 通過使用指定的 HTML 幫助器、窗體字段的名稱和選項標簽,返回單選 select 元素。 58 // 59 // 參數: 60 // htmlHelper: 61 // 此方法擴展的 HTML 幫助器實例。 62 // 63 // name: 64 // 要返回的窗體字段的名稱。 65 // 66 // optionLabel: 67 // 默認空項的文本。此參數可以為 null。 68 // 69 // 返回結果: 70 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 71 // 72 // 異常: 73 // System.ArgumentException: 74 // name 參數為 null 或為空。 75 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, string optionLabel); 76 // 77 // 摘要: 78 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定列表項和指定的 HTML 特性,返回單選 select 元素。 79 // 80 // 參數: 81 // htmlHelper: 82 // 此方法擴展的 HTML 幫助器實例。 83 // 84 // name: 85 // 要返回的窗體字段的名稱。 86 // 87 // selectList: 88 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 89 // 90 // htmlAttributes: 91 // 一個對象,其中包含要為該元素設置的 HTML 特性。 92 // 93 // 返回結果: 94 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 95 // 96 // 異常: 97 // System.ArgumentException: 98 // name 參數為 null 或為空。 99 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, IDictionary<string, object> htmlAttributes); 100 // 101 // 摘要: 102 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定列表項和指定的 HTML 特性,返回單選 select 元素。 103 // 104 // 參數: 105 // htmlHelper: 106 // 此方法擴展的 HTML 幫助器實例。 107 // 108 // name: 109 // 要返回的窗體字段的名稱。 110 // 111 // selectList: 112 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 113 // 114 // htmlAttributes: 115 // 一個對象,其中包含要為該元素設置的 HTML 特性。 116 // 117 // 返回結果: 118 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 119 // 120 // 異常: 121 // System.ArgumentException: 122 // name 參數為 null 或為空。 123 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes); 124 // 125 // 摘要: 126 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定列表項和選項標簽,返回單選 select 元素。 127 // 128 // 參數: 129 // htmlHelper: 130 // 此方法擴展的 HTML 幫助器實例。 131 // 132 // name: 133 // 要返回的窗體字段的名稱。 134 // 135 // selectList: 136 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 137 // 138 // optionLabel: 139 // 默認空項的文本。此參數可以為 null。 140 // 141 // 返回結果: 142 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 143 // 144 // 異常: 145 // System.ArgumentException: 146 // name 參數為 null 或為空。 147 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel); 148 // 149 // 摘要: 150 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定列表項、選項標簽和指定的 HTML 特性,返回單選 select 元素。 151 // 152 // 參數: 153 // htmlHelper: 154 // 此方法擴展的 HTML 幫助器實例。 155 // 156 // name: 157 // 要返回的窗體字段的名稱。 158 // 159 // selectList: 160 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 161 // 162 // optionLabel: 163 // 默認空項的文本。此參數可以為 null。 164 // 165 // htmlAttributes: 166 // 一個對象,其中包含要為該元素設置的 HTML 特性。 167 // 168 // 返回結果: 169 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 170 // 171 // 異常: 172 // System.ArgumentException: 173 // name 參數為 null 或為空。 174 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel, IDictionary<string, object> htmlAttributes); 175 // 176 // 摘要: 177 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定列表項、選項標簽和指定的 HTML 特性,返回單選 select 元素。 178 // 179 // 參數: 180 // htmlHelper: 181 // 此方法擴展的 HTML 幫助器實例。 182 // 183 // name: 184 // 要返回的窗體字段的名稱。 185 // 186 // selectList: 187 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 188 // 189 // optionLabel: 190 // 默認空項的文本。此參數可以為 null。 191 // 192 // htmlAttributes: 193 // 一個對象,其中包含要為該元素設置的 HTML 特性。 194 // 195 // 返回結果: 196 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 197 // 198 // 異常: 199 // System.ArgumentException: 200 // name 參數為 null 或為空。 201 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel, object htmlAttributes); 202 // 203 // 摘要: 204 // 使用指定列表項,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 205 // 206 // 參數: 207 // htmlHelper: 208 // 此方法擴展的 HTML 幫助器實例。 209 // 210 // expression: 211 // 一個表達式,用於標識包含要顯示的屬性的對象。 212 // 213 // selectList: 214 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 215 // 216 // 類型參數: 217 // TModel: 218 // 模型的類型。 219 // 220 // TProperty: 221 // 值的類型。 222 // 223 // 返回結果: 224 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 225 // 226 // 異常: 227 // System.ArgumentNullException: 228 // expression 參數為 null。 229 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList); 230 // 231 // 摘要: 232 // 使用指定列表項和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 233 // 234 // 參數: 235 // htmlHelper: 236 // 此方法擴展的 HTML 幫助器實例。 237 // 238 // expression: 239 // 一個表達式,用於標識包含要顯示的屬性的對象。 240 // 241 // selectList: 242 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 243 // 244 // htmlAttributes: 245 // 一個對象,其中包含要為該元素設置的 HTML 特性。 246 // 247 // 類型參數: 248 // TModel: 249 // 模型的類型。 250 // 251 // TProperty: 252 // 值的類型。 253 // 254 // 返回結果: 255 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 256 // 257 // 異常: 258 // System.ArgumentNullException: 259 // expression 參數為 null。 260 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, IDictionary<string, object> htmlAttributes); 261 // 262 // 摘要: 263 // 使用指定列表項和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 264 // 265 // 參數: 266 // htmlHelper: 267 // 此方法擴展的 HTML 幫助器實例。 268 // 269 // expression: 270 // 一個表達式,用於標識包含要顯示的屬性的對象。 271 // 272 // selectList: 273 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 274 // 275 // htmlAttributes: 276 // 一個對象,其中包含要為該元素設置的 HTML 特性。 277 // 278 // 類型參數: 279 // TModel: 280 // 模型的類型。 281 // 282 // TProperty: 283 // 值的類型。 284 // 285 // 返回結果: 286 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 287 // 288 // 異常: 289 // System.ArgumentNullException: 290 // expression 參數為 null。 291 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes); 292 // 293 // 摘要: 294 // 使用指定列表項和選項標簽,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 295 // 296 // 參數: 297 // htmlHelper: 298 // 此方法擴展的 HTML 幫助器實例。 299 // 300 // expression: 301 // 一個表達式,用於標識包含要顯示的屬性的對象。 302 // 303 // selectList: 304 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 305 // 306 // optionLabel: 307 // 默認空項的文本。此參數可以為 null。 308 // 309 // 類型參數: 310 // TModel: 311 // 模型的類型。 312 // 313 // TProperty: 314 // 值的類型。 315 // 316 // 返回結果: 317 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 318 // 319 // 異常: 320 // System.ArgumentNullException: 321 // expression 參數為 null。 322 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel); 323 // 324 // 摘要: 325 // 使用指定列表項、選項標簽和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 326 // 327 // 參數: 328 // htmlHelper: 329 // 此方法擴展的 HTML 幫助器實例。 330 // 331 // expression: 332 // 一個表達式,用於標識包含要顯示的屬性的對象。 333 // 334 // selectList: 335 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 336 // 337 // optionLabel: 338 // 默認空項的文本。此參數可以為 null。 339 // 340 // htmlAttributes: 341 // 一個對象,其中包含要為該元素設置的 HTML 特性。 342 // 343 // 類型參數: 344 // TModel: 345 // 模型的類型。 346 // 347 // TProperty: 348 // 值的類型。 349 // 350 // 返回結果: 351 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 352 // 353 // 異常: 354 // System.ArgumentNullException: 355 // expression 參數為 null。 356 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel, IDictionary<string, object> htmlAttributes); 357 // 358 // 摘要: 359 // 使用指定列表項、選項標簽和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 360 // 361 // 參數: 362 // htmlHelper: 363 // 此方法擴展的 HTML 幫助器實例。 364 // 365 // expression: 366 // 一個表達式,用於標識包含要顯示的屬性的對象。 367 // 368 // selectList: 369 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 370 // 371 // optionLabel: 372 // 默認空項的文本。此參數可以為 null。 373 // 374 // htmlAttributes: 375 // 一個對象,其中包含要為該元素設置的 HTML 特性。 376 // 377 // 類型參數: 378 // TModel: 379 // 模型的類型。 380 // 381 // TProperty: 382 // 值的類型。 383 // 384 // 返回結果: 385 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 386 // 387 // 異常: 388 // System.ArgumentNullException: 389 // expression 參數為 null。 390 public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel, object htmlAttributes); 391 // 392 // 摘要: 393 // 通過使用指定的 HTML 幫助器和窗體字段的名稱,返回多選 select 元素。 394 // 395 // 參數: 396 // htmlHelper: 397 // 此方法擴展的 HTML 幫助器實例。 398 // 399 // name: 400 // 要返回的窗體字段的名稱。 401 // 402 // 返回結果: 403 // 一個 HTML select 元素。 404 // 405 // 異常: 406 // System.ArgumentException: 407 // name 參數為 null 或為空。 408 public static MvcHtmlString ListBox(this HtmlHelper htmlHelper, string name); 409 // 410 // 摘要: 411 // 通過使用指定的 HTML 幫助器、窗體字段的名稱和指定列表項,返回多選 select 元素。 412 // 413 // 參數: 414 // htmlHelper: 415 // 此方法擴展的 HTML 幫助器實例。 416 // 417 // name: 418 // 要返回的窗體字段的名稱。 419 // 420 // selectList: 421 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 422 // 423 // 返回結果: 424 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 425 // 426 // 異常: 427 // System.ArgumentException: 428 // name 參數為 null 或為空。 429 public static MvcHtmlString ListBox(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList); 430 // 431 // 摘要: 432 // 通過使用指定的 HTML 幫助器、窗體字段的名稱、指定的列表項和指定的 HTML 特性,返回多選 select 元素。 433 // 434 // 參數: 435 // htmlHelper: 436 // 此方法擴展的 HTML 幫助器實例。 437 // 438 // name: 439 // 要返回的窗體字段的名稱。 440 // 441 // selectList: 442 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 443 // 444 // htmlAttributes: 445 // 一個對象,其中包含要為該元素設置的 HTML 特性。 446 // 447 // 返回結果: 448 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 449 // 450 // 異常: 451 // System.ArgumentException: 452 // name 參數為 null 或為空。 453 public static MvcHtmlString ListBox(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, IDictionary<string, object> htmlAttributes); 454 // 455 // 摘要: 456 // 通過使用指定的 HTML 幫助器、窗體字段的名稱和指定列表項,返回多選 select 元素。 457 // 458 // 參數: 459 // htmlHelper: 460 // 此方法擴展的 HTML 幫助器實例。 461 // 462 // name: 463 // 要返回的窗體字段的名稱。 464 // 465 // selectList: 466 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 467 // 468 // htmlAttributes: 469 // 一個對象,其中包含要為該元素設置的 HTML 特性。 470 // 471 // 返回結果: 472 // 一個 HTML select 元素,對於列表中的每一項,該元素都包含一個對應的 option 子元素。 473 // 474 // 異常: 475 // System.ArgumentException: 476 // name 參數為 null 或為空。 477 public static MvcHtmlString ListBox(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes); 478 // 479 // 摘要: 480 // 使用指定列表項,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 481 // 482 // 參數: 483 // htmlHelper: 484 // 此方法擴展的 HTML 幫助器實例。 485 // 486 // expression: 487 // 一個表達式,用於標識包含要顯示的屬性的對象。 488 // 489 // selectList: 490 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 491 // 492 // 類型參數: 493 // TModel: 494 // 模型的類型。 495 // 496 // TProperty: 497 // 屬性的類型。 498 // 499 // 返回結果: 500 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 501 // 502 // 異常: 503 // System.ArgumentNullException: 504 // expression 參數為 null。 505 public static MvcHtmlString ListBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList); 506 // 507 // 摘要: 508 // 使用指定列表項和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 509 // 510 // 參數: 511 // htmlHelper: 512 // 此方法擴展的 HTML 幫助器實例。 513 // 514 // expression: 515 // 一個表達式,用於標識包含要顯示的屬性的對象。 516 // 517 // selectList: 518 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 519 // 520 // htmlAttributes: 521 // 一個對象,其中包含要為該元素設置的 HTML 特性。 522 // 523 // 類型參數: 524 // TModel: 525 // 模型的類型。 526 // 527 // TProperty: 528 // 屬性的類型。 529 // 530 // 返回結果: 531 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 532 // 533 // 異常: 534 // System.ArgumentNullException: 535 // expression 參數為 null。 536 public static MvcHtmlString ListBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, IDictionary<string, object> htmlAttributes); 537 // 538 // 摘要: 539 // 使用指定列表項和 HTML 特性,為由指定表達式表示的對象中的每個屬性返回對應的 HTML select 元素。 540 // 541 // 參數: 542 // htmlHelper: 543 // 此方法擴展的 HTML 幫助器實例。 544 // 545 // expression: 546 // 一個表達式,用於標識包含要顯示的屬性的對象。 547 // 548 // selectList: 549 // 一個用於填充下拉列表的 System.Web.Mvc.SelectListItem 對象的集合。 550 // 551 // htmlAttributes: 552 // 一個對象,其中包含要為該元素設置的 HTML 特性。 553 // 554 // 類型參數: 555 // TModel: 556 // 模型的類型。 557 // 558 // TProperty: 559 // 屬性的類型。 560 // 561 // 返回結果: 562 // 一個由表達式表示的對象中的每個屬性所對應的 HTML select 元素。 563 // 564 // 異常: 565 // System.ArgumentNullException: 566 // expression 參數為 null。 567 public static MvcHtmlString ListBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes); 568 } 569 }
修改后瀏覽
在頁面上右鍵,查看源代碼,感興趣的朋友可以看看生成的html代碼,也許從中會發現點什么!

1 2 3 <!DOCTYPE html> 4 5 <html> 6 <head> 7 <meta name="viewport" content="width=device-width" /> 8 <title>Create</title> 9 </head> 10 <body> 11 <form action="/Student/Create" method="post"><input name="__RequestVerificationToken" type="hidden" value="-esm1DokcqNfvvHVCnonuFlC9CB0mqi4m7aiPipE6UJ03uuS35Z100j0t-aNx_84Uf4w80Ywe2an4ZWLLjErt2pPIVq-4B4WbMqcIsdHCA81" /> <div class="form-horizontal"> 12 <h4>Student</h4> 13 <hr /> 14 15 16 <div class="form-group"> 17 <label class="control-label col-md-2" for="stuName">stuName</label> 18 <div class="col-md-10"> 19 <input class="text-box single-line" id="stuName" name="stuName" type="text" value="" /> 20 <span class="field-validation-valid" data-valmsg-for="stuName" data-valmsg-replace="true"></span> 21 </div> 22 </div> 23 24 <div class="form-group"> 25 <label class="control-label col-md-2" for="stuSex">stuSex</label> 26 <div class="col-md-10"> 27 <input class="text-box single-line" id="stuSex" name="stuSex" type="text" value="" /> 28 <span class="field-validation-valid" data-valmsg-for="stuSex" data-valmsg-replace="true"></span> 29 </div> 30 </div> 31 32 <div class="form-group"> 33 <label class="control-label col-md-2" for="stuBirthdate">stuBirthdate</label> 34 <div class="col-md-10"> 35 <input class="text-box single-line" data-val="true" data-val-date="字段 stuBirthdate 必須是日期。" data-val-required="stuBirthdate 字段是必需的。" id="stuBirthdate" name="stuBirthdate" type="datetime" value="" /> 36 <span class="field-validation-valid" data-valmsg-for="stuBirthdate" data-valmsg-replace="true"></span> 37 </div> 38 </div> 39 40 <div class="form-group"> 41 <label class="control-label col-md-2" for="stuStudydate">stuStudydate</label> 42 <div class="col-md-10"> 43 <input class="text-box single-line" data-val="true" data-val-date="字段 stuStudydate 必須是日期。" data-val-required="stuStudydate 字段是必需的。" id="stuStudydate" name="stuStudydate" type="datetime" value="" /> 44 <span class="field-validation-valid" data-valmsg-for="stuStudydate" data-valmsg-replace="true"></span> 45 </div> 46 </div> 47 48 <div class="form-group"> 49 <label class="control-label col-md-2" for="stuAddress">stuAddress</label> 50 <div class="col-md-10"> 51 <input class="text-box single-line" id="stuAddress" name="stuAddress" type="text" value="" /> 52 <span class="field-validation-valid" data-valmsg-for="stuAddress" data-valmsg-replace="true"></span> 53 </div> 54 </div> 55 56 <div class="form-group"> 57 <label class="control-label col-md-2" for="stuEmail">stuEmail</label> 58 <div class="col-md-10"> 59 <input class="text-box single-line" id="stuEmail" name="stuEmail" type="text" value="" /> 60 <span class="field-validation-valid" data-valmsg-for="stuEmail" data-valmsg-replace="true"></span> 61 </div> 62 </div> 63 64 <div class="form-group"> 65 <label class="control-label col-md-2" for="stuPhone">stuPhone</label> 66 <div class="col-md-10"> 67 <input class="text-box single-line" id="stuPhone" name="stuPhone" type="text" value="" /> 68 <span class="field-validation-valid" data-valmsg-for="stuPhone" data-valmsg-replace="true"></span> 69 </div> 70 </div> 71 72 <div class="form-group"> 73 <label class="control-label col-md-2" for="stuIsDel">stuIsDel</label> 74 <div class="col-md-10"> 75 <select class="list-box tri-state" id="stuIsDel" name="stuIsDel"><option selected="selected" value="">未設置</option> 76 <option value="true">True</option> 77 <option value="false">False</option> 78 </select> 79 <span class="field-validation-valid" data-valmsg-for="stuIsDel" data-valmsg-replace="true"></span> 80 </div> 81 </div> 82 83 <div class="form-group"> 84 <label class="control-label col-md-2" for="stuInputtime">stuInputtime</label> 85 <div class="col-md-10"> 86 <input class="text-box single-line" data-val="true" data-val-date="字段 stuInputtime 必須是日期。" id="stuInputtime" name="stuInputtime" type="datetime" value="" /> 87 <span class="field-validation-valid" data-valmsg-for="stuInputtime" data-valmsg-replace="true"></span> 88 </div> 89 </div> 90 91 <div class="form-group"> 92 <label class="control-label col-md-2" for="Course_classId">stuClass</label> 93 <div class="col-md-10"> 94 <select id="class" name="class"><option value=""></option> 95 <option value="1">.Net</option> 96 <option value="2">PHP</option> 97 <option value="3">Designer</option> 98 <option value="4">Java</option> 99 <option value="5">C、C++</option> 100 </select> 101 <span class="field-validation-valid" data-valmsg-for="classId" data-valmsg-replace="true"></span> 102 </div> 103 </div> 104 105 <div class="form-group"> 106 <div class="col-md-offset-2 col-md-10"> 107 <input type="submit" value="Create" class="btn btn-default" /> 108 </div> 109 </div> 110 </div> 111 </form> 112 <div> 113 <a href="/Student/Index">Back to List</a> 114 </div> 115 116 <!-- Visual Studio Browser Link --> 117 <script type="application/json" id="__browserLink_initializationData"> 118 {"appName":"Internet Explorer","requestId":"8e85ac6e799b4435b80844366f60d8a7"} 119 </script> 120 <script type="text/javascript" src="http://localhost:1882/1a3cc807a82642e2a44b68b360bc37ee/browserLink" async="async"></script> 121 <!-- End Browser Link --> 122 123 </body> 124 </html>
從這段代碼中可以看出,表單的action屬性被設置為“/Student/Create”,當點擊追加按鈕時會把表單中各文本框中的數據提交到服務器端進行保存。
處理HTTP-POST
到此為止,我們已經實現了顯示追加數據所用表單的所需代碼。我們的下一步是編寫代碼來進行表單提交到服務器后的處理。我們將要獲取用戶在數據庫中輸入的信息並且將它們作為一個新的Student保存到數據庫中。
為了實現這一處理,我們需要在StudentController類中追加第二個Create方法。這個Create方法具有一個[HttpPost]特性,它意味着我們將要用它來處理提交到“/Student/Create”這個URL地址的Post請求。另外,所有提交到“/Student/Create”這個URL地址的非POST的請求(即GET請求)將被第一個Create方法進行處理,即簡單地返回一個空的表單。
總結
本文知識點:
ViewData的使用。
[HttpPost]特性,用來處理post請求。
DropDownList如何綁定數據源。