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