1、action方法接收瀏覽器參數
1)獲取get數據
獲取路由url中配置好的制定參數:
public ActionResult Index(int id){ }
直接通過請求上下文對象裏的 Request獲取url ?後的的參數:
瀏覽器請求路徑爲:/User/UserList/1?fun=jp
Request.QueryString["fun"];
2)獲取post數據
通過Request.Form[“name”]逐個獲取表單提交的數據:
Request.Form["name"];
通過FormCollection form逐個獲取表單提交的數據:
[HttpPost]
public string Query(FormCollection form){
return form["name"];
}
通過實體對象 model 一次性獲取表單元素的數據,並設置到實體對象對應的屬性中:
[HttpPost]
public string Query(Student model){
return model.Name;
}
2、action返回值類型
返回類型 | 描述 |
---|---|
View | 將視圖呈現爲網頁 |
PartialView | 呈現分部視圖,該分部視圖定義可呈現在另一視圖內的某視圖的一部分 |
Redirect | 使用其 URL 重定向到另一操作方法 |
RedirectToAction | 重定向到另一操作方法 |
RedirectToRoute | 重定向到另一操作方法 |
Content | 返回用戶定義的內容類型 |
Json | 返回序列化的 JSON 對象 |
JavaScript | 返回可在客戶端上執行的腳本 |
File | 返回要寫入響應中的二進制輸出 |
(無) | 表示在操作方法必須返回 null 結果 (void) 的情況下所使用的返回值 |
3、Controller和View的數據傳輸方式
Controller和View的數據傳輸方式有四種
ViewData、ViewBag、TempData、ViewModel
4、ViewData
1)將一個字符串傳值到視圖中
public ActionResult Index()
{
ViewData["str1"]= "這是一個字符串";
return View();
}
在視圖中我們可以用下面代碼將字符串顯示出來
<h1>@ViewData["str1"]</h1>
2)將一個字符串集合傳遞到視圖中
public ActionResult Index()
{
List<string> str1= new List<string>();
str1.Add("1111");
str1.Add("2222");
str1.Add("3333");
ViewData["str"] = str1;
return View();
}
在視圖中我們通過下面語句將str1的值顯示出來
@foreach (var a in ViewData["str"] as List<string>)
{
@a
}
注:ViewData是Key/Value字典集合,需要轉換合適的類型,不能直接在foreach裏面使用
3)將一個datatable的值傳遞到視圖中
public ActionResult Index()
{
DataTable newtable = new DataTable("d");
newtable.Columns.Add("商品編號", typeof(string));
newtable.Columns.Add("客戶編號", typeof(string));
DataRow NewRow = newtable.NewRow();
NewRow["商品編號"] = "132323213434";
NewRow["客戶編號"] = "344223443244";
newtable.Rows.Add(NewRow);
DataRow SNewRow = newtable.NewRow();
SNewRow["商品編號"] = "343432445456";
SNewRow["客戶編號"] = "454523432453";
newtable.Rows.Add(SNewRow);
ViewData["dt"]= newtable;
return View();
}
在視圖中我們通過下面語句將dt的值顯示出來
@using System.Data;
<ul>
@foreach(DataRow dr in (ViewData["dt"] as DataTable).Rows)
{
<li>
@dr["商品編號"],@dr["客戶編號"],
</li>
}
</ul>
5、ViewBag
是dynamic類型對像,會在程序運行的過程中被解析,可以直接在foreach裏直接使用
public ActionResult Index()
{
ViewBag.str="這是一個字符串";
return View();
}
在視圖中我們通過下面語句將str1的值顯示出來
<h1>@ViewBag.str</h1>
6、TempData
TempData保存的數據是存儲在Session中,Controller每次請求時都是從Session中取到TempData(),然後清除Session,獲取完TempData的數據,雖然保存的內部字典中,但字典中的每個條目在訪問一次後就從Controller中刪除,所以TempData最多經過一次Controller傳遞,並且每個元素最多隻能被訪問一次然後就會唄自動刪除。
注意:這裏的一次訪問是指從一個請求到下一個請求,因爲在下一個請求到來之後,會從Session中取出保存在裏面的TempData數據並賦值給TempData,然後將數據從Session中刪除
7、ViewModel
將一個字符串集合傳遞到視圖中
public ActionResult Index()
{
List<string> str1= new List<string>();
str1.Add("1111");
str1.Add("2222");
str1.Add("3333");
return View(str1);
}
在視圖中我們通過下面語句將str1的值顯示出來
爲了讓View知道我們傳過去的是哪一個對象,我們需要將@model關鍵字指向ViewModel,就像你在指定一個一般的model一樣。
@model FourthCoffee.Web.ViewModels.CustomerViewModel
調用@model
@foreach (var a in model)
{
@a
}