日期:2014-05-17  浏览次数:20834 次

Asp MVC(视图层)

ASP MVC (View) 知识点
1.通过控制层返回给VIEW层,ViewDate如果包含值,那么VIEW层取值的方式是:

<%:ViewData["Message"]%>,如果是从ViewData中取数据注意要有冒号。
2.在该层尽量使用HtmlHelp来呈现HTML的表单控件。
3.视图层文件夹结构:
View包含于各个controller层对应的目录结构,还有一个shared目录文件夹。
系统对VIEW层的访问机制是:首先根据CONTROLLER层返回的视图,如果return

View()没有参数,那么就去VIEW目录文件夹下找与该控制层结构一致的文件夹,然

后再找到名字为所对应方法名字的xx.aspx
例如:
public ActionResult Index()
??????? {
??????????? ViewData["Message"] = "欢迎使用 ASP.NET MVC!";

??????????? return View();
??????? }
MVC框架会去寻找view>控制层>Index.aspx,如果找不到,再去shared文件夹下找,

再找不到则抛错。
如果你返回的路径是另外一个控制层目录下的ASPX文件,那就必须写明具体路径。
return View("~/Acount/index.aspx");

4.在VIEW层使用弱类型和强类型。
弱类型指的是,控制层传到页面的是直接将一个LIST放入到ViewData[]中,然后在页面进行转换。例如:
public ActionResult Index()
??????? {
??????????? ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
??????????? var dinners = new List<Dinners>();
??????????? for (int i = 0; i < 10; i++)
??????????? {
??????????????? Dinners din = new Dinners();
??????????????? din.Address = "建设北路"+i+"号";
??????????????? dinners.Add(din);
??????????? }
??????????? ViewData["list"] = dinners;
??????????? return View();
??????? }
视图层取出对象:
<%foreach (NerdDinner.Dinners p in (ViewData["list"]) as IEnumerable<NerdDinner.Dinners>)
????????? { %>
??????????????? <li><%:p.Address %></li>
??????? <% }%>

强类型的取值方式:
控制层代码:
public ActionResult Index()
??????? {
??????????? ViewData["Message"] = "欢迎使用 ASP.NET MVC!";
??????????? var dinners = new List<Dinners>();
??????????? for (int i = 0; i < 10; i++)
??????????? {
??????????????? Dinners din = new Dinners();
??????????????? din.Address = "建设北路"+i+"号";
??????????????? dinners.Add(din);
??????????? }
?????????? //将LIST放入到一个MODEL中
??????????? return View(dinners);
??????? }
视图层:
首先要在标签的地方标注你要强制转换的类型:
Inherits="System.Web.Mvc.ViewPage<IEnumerable<NerdDinner.Dinners>>"

然后取值:(可以不用转型了)
?<%foreach (NerdDinner.Dinners p in Model)
????????? { %>
??????????? <li><%:p.Address %></li>
??????? <%} %>

?

注释:

var关键字是C# 3.0开始新增的特性,称为推断类型。
它是指如果某个局部变量被声明为var,那么该声明被视为隐含类型的局部变量声明。var而不是显式类型。var关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型、匿名类型、用户定义类型、NET Framework类库中定义的类型或任何表达式。
在方法范围中声明的变量可以具有隐式类型var。隐式类型的本地变量是强类型变量,但由编译器确定类型。需要了解的一点是,var关键字并不意味着“变体”,也不表示该变量是松散类型化变量或后期绑定变量。它只是表示由编译器确定和分配最适当的类型。
至于你的那段代码中使用var,是指将查询结果赋值给变量result,根据查询结果来判断result的类型,当你执行后就会发现result是一个数组类型。

?

由控制层动态决定加载哪个视图:

public ActionResult Index()
??????? {
???????????
??????????? ViewResult vr = View("next");
??????????? return View(vr);
??????????
??????? }