ASP.NET MVC学习笔记-Controller与View传值

本文介绍了ASP.NET MVC中数据的传递方法,包括ViewData和TempData的使用、ViewData与TextBox的自动绑定、View向Controller传值的方式以及强类型的传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在asp.net2.0的网页开发模式下,我们一般通过直将访问页面控件, 将值写入到页面, 但在Asp.net MVC模式下,已不能在Controller中再去访问页面控件了,要如何才能给View页面传值呢?在Controller中有两个字典(ViewData和TempData)来实现View之间的值传递,Controller通过ViewData,TempData传通到ViewResult中, 然后再由ViewResult传递到ViewPage中来实现值传递的。

1.TempData和ViewData的应用
ViewData只对当前Action有效,而TempData有点类似于Session, 可在所有View访问, 一般用于记录错误信息.
Action代码:
[csharp] view plain copy
  1. publicActionResultIndex()
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. returnView();
  5. }
[csharp] view plain copy
  1. publicActionResultIndex()
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. returnView();
  5. }

页面代码:
<h2><%=Html.Encode(ViewData["Message"])%></h2>
TempData使用方式与View使用方式一致.


2. ViewData与TextBox实现自动绑定
利用HtmlHelper创建TextBox时,使用名称与ViewData中的Key一致, 就会自动实现值绑定,如:

Name:<%=Html.TextBox("name")%>

名称不相同的情况下,也可以利用TextBox的重载传值:
Name:<%=Html.TextBox("name",ViewData["Nm"])%>

3.View向Controller传值
1). 利用Action参数
[csharp] view plain copy
  1. <formname="form1"action="/Home/Index"method="post">
  2. Name:<inputtype="text"name="name"/><br/>
  3. Sex:<inputtype="text"name="sex"/>
  4. <inputtype="submit"value="submit"/>
  5. </form>
  6. <%
  7. if(ViewData["name"]!=null)
  8. {
  9. Response.Write("yournameis:"+ViewData["name"]+",yoursexis:"+ViewData["sex"]);
  10. }
  11. %>
  12. :
  13. publicActionResultIndex(stringname,stringsex)
  14. {
  15. ViewData["Message"]="WelcometoASP.NETMVC!";
  16. ViewData["name"]=name;
  17. ViewData["sex"]=sex;
  18. returnView();
  19. }
[csharp] view plain copy
  1. <formname="form1"action="/Home/Index"method="post">
  2. Name:<inputtype="text"name="name"/><br/>
  3. Sex:<inputtype="text"name="sex"/>
  4. <inputtype="submit"value="submit"/>
  5. </form>
  6. <%
  7. if(ViewData["name"]!=null)
  8. {
  9. Response.Write("yournameis:"+ViewData["name"]+",yoursexis:"+ViewData["sex"]);
  10. }
  11. %>
  12. :
  13. publicActionResultIndex(stringname,stringsex)
  14. {
  15. ViewData["Message"]="WelcometoASP.NETMVC!";
  16. ViewData["name"]=name;
  17. ViewData["sex"]=sex;
  18. returnView();
  19. }

  1. 2).利用Request.From或Request.QueryString
  1. 2).利用Request.From或Request.QueryString

[csharp] view plain copy
  1. publicActionResultIndex()
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. ViewData["name"]=Request.Form["name"];
  5. ViewData["sex"]=Request.Form["sex"];
  6. returnView();
  7. }
[csharp] view plain copy
  1. publicActionResultIndex()
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. ViewData["name"]=Request.Form["name"];
  5. ViewData["sex"]=Request.Form["sex"];
  6. returnView();
  7. }


3). 利用FormCollection获取页面值

[csharp] view plain copy
  1. publicActionResultIndex(FormCollectionform)
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. Useru=newUser();
  5. u.Name=form["Name"];
  6. u.Password=form["Password"];
  7. returnView(u);
  8. }
[csharp] view plain copy
  1. publicActionResultIndex(FormCollectionform)
  2. {
  3. ViewData["Message"]="WelcometoASP.NETMVC!";
  4. Useru=newUser();
  5. u.Name=form["Name"];
  6. u.Password=form["Password"];
  7. returnView(u);
  8. }

4.传递强类型
1).添加一个传递强类型Model的Action
[csharp] view plain copy
  1. publicActionResultModelDemo()
  2. {
  3. Useru=newUser(){UserName="li",Password="abcde"};
  4. returnView(u);
  5. }
[csharp] view plain copy
  1. publicActionResultModelDemo()
  2. {
  3. Useru=newUser(){UserName="li",Password="abcde"};
  4. returnView(u);
  5. }

对应的View也需要继随于ViewPage<User>, 对应代码如下:
  1. <p>
  2. <%Useru=(User)ViewData.Model;%>
  3. UserName:
  4. <%=Html.Encode(u.UserName)%>
  5. </p>
  6. <p>
  7. Password:
  8. <%=Html.Encode(u.Password)%>
  9. </p>
  1. <p>
  2. <%Useru=(User)ViewData.Model;%>
  3. UserName:
  4. <%=Html.Encode(u.UserName)%>
  5. </p>
  6. <p>
  7. Password:
  8. <%=Html.Encode(u.Password)%>
  9. </p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值