MVC 控制器与动作

  已经断断续续自学MVC接近个多月,也算是有点小入门了,对于当初自己看代码不是很清楚的一些地方,也开始有点眉目了

  1.ViewResult继承自ActionResult,很多动作方法其实都可以使返回ActionResult对象,但是如果明确知道是渲染一个视图,那么最好还是使用ViewResult返回值类型,即体现了面向对象约定,又能够让自己清楚如何去使用每一种结果类型

  2.而返回ViewResult类型可以使用View控制器辅助方法,这个当时自己看的迷迷糊糊,怎么又是return new ViewResult("XX"),又是return View("XX"),其实这两种方式都是同样的效果,个人比较倾向于第二种,简洁...如果View()方法没有传入实参参数,那么MVC控制根据约定就会渲染默认的以动作器方法名为名称的视图,位置在Views/ControllerName/ActionName.aspx//(这是使用aspx视图引擎)或Views/ControllerName/ActionName.cshtml//razor试图引擎,我用的是Razor。

    如果传入了参数,那么如果是一个string对象,例如return View("Nice"),那么控制器就会渲染Views/ControllerName/Nice.cshtml,如果用户想要渲染其他视图文件夹下的视图,需要另外添加参数,如return view("Nice","Good");那么返回的视图就成为了Views/Good/Nice.cshtml,其实也挺简单的,主要是自己当时不会。。。

    如果是其他数据类型的对象,那只能说是将动作方法中的数据传递给视图,而返回的视图名称为默认的Views/ControllerName/ActionName.cshtml,在视图中可以使用@Model去访问他,例如

DateTime date = DateTime.Now;
return View(date);

 那么在视图中,想要使用这个date数据,就要这样做了

The Day is :@(((DateTime)Model).DayOfWeek)

 需要强制转换,可以看出很坑爹,所以推荐使用强类型视图,但是如果传递多个值给视图该怎么办???根据我的学习,一般是推荐使用视图模型,然后在渲染视图的时候选择该视图模型类型的强类型视图,这样就可以传递多个值了,假如Nice是个视图模型类型,我们就可以这样做

public ViewResult Gonice(){
  Nice nice = new Nice();
  nice.Name = "Terry";
  nice.Reason = "中奖啦";
  return View(nice);      
}
//在Nice的强类型视图中就可以直接这样调用啦

<h1>谁比较nice@Model.Name</h1>
<p>为什么Nice?@Model.Reason</p>

 传递数据除了使用视图模型,还可以用ViewBag.Name或者ViewData["Name"]这两种方法

posted @ 2014-06-12 16:38  LgV5  阅读(240)  评论(0编辑  收藏  举报