MVC(二、控制器 Action方法參數與返回值)

這裏寫圖片描述

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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章