读保哥《ASP.NET MVC2开发实战》第三回(Controller2)

区分ViewData和TempData

viewdata属性是一个ViewDataDictionary类,这里就不介绍了;

用法:

Controller代码:

public ActionResult Index()

{

ViewData["name"]="王贺";

return View();
}

View代码:

<%:ViewData["name"]%>//这行代码就引用了{ViewData["name"]="王贺";}便把“王贺”显示出来了;

TempData:

这个就特了,用法跟ViewData一样,但TempData只在浏览器执行一次就没了,当你再去刷新的话就没了(好神奇噢!!!),所以他只是暂存,暂存多久呢,保哥说是“一次网页请求”。

模型绑定

再来讨论一下模型绑定这个问题(其实在第一个项目中已经涉及到了这个问题),在这就好好了解了解

(1)简单绑定:

View:
<%:Html.TextBox("uname")%>

<%:ViewData["name"]%>//获取Controller的ViewData

Controller:

public ActionResult Index(string name)

{

   ViewData["name"]=name;//接收从View传来的参数Html.TextBox("uname"),在这里的name就是<input type="TextBox" name="uname">中name的属性uname传到了服务器;

return View();

}

如果写成webform的话就是这种:

text.htm:

<form action="Index.aspx" >

<input type="TextBox" name="uname">

<input type="submit" value="submit"/>

</form>

Index.aspx:

Request.Form["uname"];

这种绑定还有另一种方法;

MVC提供了FormCollection类;

Controller还可以这么写:

public ActionResult Index(FormCollection form)

{

   ViewData["name"]=form["uname"];

return View();

}

(2)复杂绑定(利用类来绑定,类似于ADO.NET的强类型)

例如:有三个元素,Name,Email,Message

那就定义一个类:

Class Msg

    public Name{get;set;}

    public Email{get;set; }

public Message {get;set;}

 

View:

<%:Html.TextBoxFor(x=>x.Name)%>

 <%:Html.TextBoxFor(x=>x.Email)%>

<%:Html.TextBoxFor(x=>x.Message)%>

<%:ViewData["name"]%>

<%:ViewData["Email"]%>

<%:ViewData["Message"]%>

 Controller:

public ActionResult Index(Msg msg)//调用类Meg

{

   ViewData["name"]=msg.Name;

ViewData["Email"]=msg.Email;

ViewData["Message"]=msg.Message;

 

return View();

}

(3)多个复杂模型绑定

<input type="TextBox" name="form1.Name"/>

<input type="TextBox" name="form1.Email"/>

<input type="TextBox" name="form1.Message"/>

 

<input type="TextBox" name="form2.Name"/>

 

<input type="TextBox" name="form2.Email"/>

 

<input type="TextBox" name="form2.Message"/>

Controller:

 

public ActionResult Index(Msg form1,Msg form2)//调用类Meg

 

{

 

   ViewData["form1.name"]=form1.Name;

ViewData["form2.name"]=form2.Name;

return View();

}

(4)利用bind属性来限制更新元素:

当你来提交表单中的元素,有些元素你不行提交到数据库,你就可以通过Bind属性来限制:

 

public ActionResult Index([Bind(Exclude="Name")]Msg msg)//这样就可以限制name的绑定

 

{

}

 

public ActionResult Index([Bind(include="Email,Message")]Msg msg)//这样就可以限制name的绑定

 

 

 

{

 

}

也可以在类中定义:

[Bind(Include="Email,Message")]

Class Msg

 

 

    public Name{get;set;}

 

    public Email{get;set; }

 

public Message {get;set;}

 

 

 

今天暂时就写到这吧

 

 

 

 

 

 

posted @ 2012-04-12 21:27  王贺blog  阅读(282)  评论(0编辑  收藏  举报