ASP.NET MVC Controller向View传值的几种方式
1)ViewBag
ViewBag是动态类型,只对当前Action有效,使用时直接添加属性赋值即可 ViewBag.myName
控制器代码:
1 2 3 4 5 6 | public ActionResult Index() { ViewBag.name = "周江霄" ; ViewBag.message = "欢迎使用MVC设计模式~~" ; return View(); } |
视图代码:
<div> <!--利用HtmlHelper创建TextBox时,使用名称与ViewBag中的Key一致, 就会自动实现值绑定--> @Html.TextBox("name") @ViewBag.message </div>
2)ViewData
ViewData只对当前Action有效,它是一个字典集合,通过key值读取对应的value;
控制器代码:
public ActionResult Index() { ViewData["name"] = "周江霄"; ViewData["message"] = "欢迎使用MVC设计模式~~"; return View(); }
视图代码:
<div> <!--利用HtmlHelper创建TextBox时,使用名称与ViewData中的Key一致, 就会自动实现值绑定--> @Html.TextBox("name") @ViewData["message"] </div>
3)TempData
使用TempData和使用ViewData方法是一样的,但是它可用于在不同的Action之间传值,这是ViewData做不到的。
控制器代码:
public class MVCController : Controller { public ActionResult Index1() { TempData["name"] = "周江霄"; return View(); } public ActionResult Index2() { string strName = TempData["name"].ToString() return View(); }
上面的代码中,Index()给TempData添加了一个键值对,假设我们先请求Index这个Action,接着请求Index2这个Action,那么在Index2中,我们便可以得到之前添加到TempData的键值对。有趣的是,这时如果再次请求Index2,那么从TempData中读到的MyName的值会是null。这是因为TempData和一个临时的Session差不多,当Acion执行的时候它做为一个全局对象保存的内存中,而一旦Action的执行完成,就会释放内存空间,这就是它与ViewData最大的不同之处。
4)Model
Controller通过Model传值应该是MVC中使用最为普遍的一种传值方式,通过强类型绑定,在View中可以很方便的通过Model的相应属性得到想要的值。
Model代码:
public partial class YzAdministratorEntity
{
public YzAdministratorEntity()
{
this.YzClearRecordEntity = new HashSet<YzClearRecordEntity>();
this.YzNotifyInfoEntity = new HashSet<YzNotifyInfoEntity>();
}
public System.Guid ID { get; set; }
public string AdminPassword { get; set; }
public string AdminName { get; set; }
public bool isUsed { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "用户ID不能为空")]
public string AdministratorID { get; set; }
public string AdminLevel { get; set; }
public virtual ICollection<YzClearRecordEntity> YzClearRecordEntity { get; set; }
public virtual ICollection<YzNotifyInfoEntity> YzNotifyInfoEntity { get; set; }
}
视图代码:
强类型绑定:
@model Model.YzAdministratorEntity
通过Linq自动匹配Model和Label或TxtBox的属性值:
<div>
<span class="editor-label">
@Html.Label("编号:")
</span>
<span class="editor-field">
@Html.EditorFor(a => a.AdministratorID)
@Html.ValidationMessageFor(model => model.AdministratorID)
</span>
</div>
<div>
<span class="editor-label">
@Html.Label("密码:")
</span>
<span class="editor-field">
@Html.EditorFor(a => a.AdminPassword )
</span>
</div>
<div>
<span class="editor-label">
@Html.Label("真实姓名:")
</span>
<span class="editor-field">
@Html.EditorFor(a => a.AdminName )
</span>
</div>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?