您的位置:首页 > 编程语言 > ASP

MVC(二、控制器 Action方法参数与返回值)

2017-01-20 13:56 477 查看


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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息