一、控制器传到视图
1.传字符串
(1)ViewBag
控制器传
public ActionResult Index() { //ViewBag后的变量可以是任意,接收时要是相同的名称,可以一次传多个值 ViewBag.Content = "Hello"; ViewBag.Name= "Tom"; return View(); }
view收
//@的作用是输出 @ViewBag.Content @ViewBag.Name
(2)ViewData
控制器传
//类似键值对的方式 ViewData["Age"] = 18;
view收
@ViewData["Age"]
注意:ViewBag和ViewData本质相同,所以也可以用ViewBag传,ViewData收
(3) TempData
本质上是一个session。全页面都可以读取,读取一次会消失。
@TempData["Age"]
2.View
(1)传一个对象
控制器传
public class HomeController : Controller { public ActionResult Index() { Student stu = new Student() { Age = 10, Name = "Tom" }; return View(stu); } } public class Student { public int Age; public string Name; }
视图收
@Model.Age
@Model.Name
强类型视图
默认情况下视图里的Model用.时是无法弹出提示的,这是如果明确告诉视图用的是哪个Model的话就可以在使用@Model时弹出提示
//后面是定义类时的路径,Blog是项目名 @model Blog.Models.Student
(2)使用指定view
public ActionResult Index() { return View("Show"); }
传一个字符串,会跳转到Show.cshtml视图
默认是Home文件夹的界面,可以指定界面
return View("~/Views/Resume/Show.cshtml");
(3)使用模板页
可以使用指定页面的同时,使用模板页
return View("Show", "_Layout1");
(4)其他View重载
//指定视图,数据对象 protected internal ViewResult View(string viewName, object model) //指定视图,指定模板,数据对象 protected internal virtual ViewResult View(string viewName, string masterName, object model)
另:模板页也可以直接在视图里设置
二、控制器接收数据
控制器使用参数接受数据
(1)一个参数
//既可以接收get数据,也可以接收post数据 public ActionResult Index(string name) { return Content(name); }
get访问控制器
http://localhost:52846/Home/Index?name=tom
post访问
需要表单,,,略
(2)使用Model接收
当参数值过多时,可以使用对象接收值
public ActionResult Index(Student stu) { return Content(stu.Name); }
校验,待补
if (ModelState.IsValid) { }
model里加上校验特性
首先action的跳转大致归类:
1跳转到与当前同一控制器内的action和不同控制器内的action、
2带有参数的action跳转和不带参数的action跳转。
3跳转到指定视图,不经过Controller的Action。
//跳转到当前Controller的指定Action(此处为Index),不带参数。
一、RedirectToAction("Index");
//跳转到指定Controller下的指定Action,不带阐述
二、RedirectToAction(ActionName,ControllerName)
//使用路由名称和路由值重定向到指定的路由。不带参数。
三、RedirectToRoute(new {controller="Home",action="Index"});
//使用路由名称和路由值重定向到指定的路由。带参数。
四、RedirectToRoute(new {controller="Home",action="Index", id=param});
//跳转到当前controller下的Action,可带参数。
五、Response.Redirect("Index?id=1");
//跳转到当前controller下的Action,不带参数。
六、return Redirect("Index");
//跳转到当前路径下的指定View(视图),但不经过Action方法。
七、return View("Index");
//跳转到指定路径下的指定View(视图),但不经过Action方法。这种方法是写全路径
八、return View("~/Views/Home/Index.aspx");
//跳转到当前Controller,当前Action下的View。 最常见。
九、return View();