本系列目錄:ASP.NET MVC4入門到精通系列目錄彙總html
Controller主要負責響應用戶的輸入。主要關注的是應用程序流,輸入數據的處理,以及對相關視圖(View)輸出數據的提供。瀏覽器
Action方法接收參數:
a.接收瀏覽器傳過來的參數(get-兩種格式/post)
a1.接收FormCollection Request.Form工具
1.經過Request.Form["name"] 逐個獲取 表單提交的數據post
在View視圖中url
@Html.TextBoxFor(x => x.CusName, new { @class = "trade-timen", @id = "cusName" })<span class="wtps">* @Html.ValidationMessageFor(m => m.CusName)
控制器中spa
[HttpPost]
public string UpdateCustomerInfo(FormCollection form)
{
return Request.Form["CusName"];;
}
注意:在View界面要存在name屬性爲CusName的表單元素,由於提交表單數據的時候,只會提交全部帶name標籤的數據。3d
2.經過 FormCollection form逐個獲取 表單提交的數據code
[HttpPost]
public string UpdateCustomerInfo(FormCollection form) { return form["CusName"];
}
a2.接收Modelorm
經過 實體對象 一次性獲取 表單元素的數據,並設置到實體對象對應的屬性中htm
/// <summary>
/// 修改客戶
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public ActionResult UpdateCustomer(CustomerInfo info)
{
string msg = string.Empty;
if (ModelState.IsValid)
{
try
{
CustomerInfo model = CustomerInfo.Load(info.ID);
model.CusCode = info.CusCode;
model.CusName = info.CusName;
model.Phone = info.Phone;
model.Tel = info.Tel;
model.Email = info.Email;
model.Fax = info.Fax;
model.Country = info.Country;
model.Address = info.Address;
model.CompanyName = info.CompanyName;
model.BusssinessType = info.BusssinessType;
model.Status = info.Status;
model.Update();
msg = "修改客戶成功。";
}
catch (Exception ex)
{
msg = "修改客戶失敗!" + ex.Message;
ViewBag.Msg = string.Format(message, msg, false, "1");
}
ViewBag.Msg = string.Format(message, msg, true, "0");
}
return View();
}
注意: 表單中的表單元素的屬性名稱必須和實體對象的屬性同樣!
摺疊類中全部方法:ctrl+m+o
摺疊類中全部的代碼塊,包括類:ctrl+m+l
b.接收Get數據,Request.QueryString
直接經過請求上下文對象裏的 Request獲取 url ?後的的參數:
瀏覽器請求路徑爲:/User/UserList/1?kjy=jp
控制器獲取:Request.QueryString["kjy"];
Action方法輸出返回值:
b1.string:直接 返回響應報文字符串;
b2.ActionResult:返回控制器結果對象
(裏面會包含什麼呢?能作什麼呢?)
b3.JsonResult:返回 Json 字符串
Action的返回值-ActionResult
public ActionResult Index() { return View();//默認狀況下不給參數返回和方法同名的視圖,即使用視圖 Index.cshtml 路徑在當前控制器對應的View目錄下面 return View("OtherIndex");//使用 OtherIndex.cshtml return View("~/Views/Home/Test.cshtml"); }
Controller是如何向View進行數據傳輸的呢?
控制器將處理後的數據「傳」給視圖的方式
ViewData/ViewBag/TempData/Model
咱們先來看下示例
控制器代碼:
public ActionResult Index() { ViewBag.UserName = "小李飛刀"; ViewData["UserName"] = "陸小鳳"; TempData["UserName"] = "楚留香";//臨時數據 User model = new User { UserName = "謝曉峯" }; return View(model); //這行代碼其實就至關於ViewData.Model=model }
View代碼:
@{ ViewBag.Title = "Index"; } <div>@ViewBag.UserName </div> <div>@ViewData["UserName"] </div> <div>@TempData["UserName"] </div> <div>@Model.UserName</div>
Model其實就是ViewData.Model
你們可能以爲這十分顯而易見,結果確定是
發現,只要從TempData中取出一個元素,就會當即將此元素移除!
在控制器裏的Action方法最後 調用View加載視圖的時候,將 數據對象傳入。
return View(model);
視圖中,能夠經過 Model屬性獲取!而且不須要轉型就能夠直接使用!
注意:Model雖然能夠不轉型就直接使用,可是 由於編譯器沒法在編譯時獲取它的類型,因此就沒法出現智能提示!爲了解決這個問題,咱們能夠在試圖的最上面經過代碼指定model類型
查看源碼:
當咱們在試圖上添加了 @model指令時
當前視圖就會繼承於 WebViewPage<T> 強類型視圖頁面類,而且指定T爲Student:
若是沒有添加@model指令:當前視圖就會繼承於 WebViewPage<T> 強類型視圖頁面類,但T變成了 dynamic
到這裏,Controller的數據怎麼就傳到View了,我明明只給Controller中的ViewData/ViewBag/TempData/賦值了,或者只把對象傳給了View方法。
爲何View中就能夠直接調用了呢?咱們知道之前的ASP.NET,aspx和aspx.cs是一個繼承關係,子類能夠直接調用父類的屬性方法。你ASP.NET MVC中View和Controller之間又有什麼關係呢?
View和Controller中都有ViewData/ViewBag/TempData這幾個對象,在給Controller中這些對象賦值後,Controller會把這些值賦值給View中對應的這幾個對象。
本系列目錄:ASP.NET MVC4入門到精通系列目錄彙總