本文实例讲述了ASP.NET中MVC传递数据的几种形式。分享给大家供大家参考。具体如下:
在Asp.net mvc开发中,Controller需要向View提供Model,然后View将此Model渲染成HTML。这篇文章介绍三种由Controller向View传递数据的方式,实现一个DropDownList的显示。
第一种:ViewData
ViewData是一个Dictionary。使用非常简单,看下面代码:
public ActionResult ViewDataWay(int id) { Book book =bookRepository.GetBook(id); ViewData["Countries"] = new SelectList(PhoneValidator.Countries, book.Country); return View(book); }
在View中使用下面代码取值:
<div class="editor-field"> <%= Html.DropDownList("Country", ViewData["Countries"] as SelectList) %> <%: Html.ValidationMessageFor(model => model.Country) %> </div>
上面代码使用as将它转换成SelectList。
处理POST代码如下:
[HttpPost] public ActionResult ViewDataWay(int id, FormCollection collection) { Book book = bookRepository.GetBook(id); UpdateModel<Book>(book); bookRepository.Save(book); return RedirectToAction("Details", new { id=id}); }
第二种:ViewModel
使用ViewModel的方式,我们先创建一个BookViewModel,代码如下:
public class BookViewModel { public Book Book { get; set; } public SelectList Countries { get; set; } public BookViewModel(Book book) { Book = book; Countries = new SelectList(PhoneValidator.Countries,book.Country); } }
在控制器的Aciton使用ViewModel存放数据的代码如下:
public ActionResult ViewModelWay(int id) { Book book = bookRepository.GetBook(id); return View(new BookViewModel(book)); }
在View中,这种方式比第一种方式好在:它支持智能感应。
效果和第一种方式一样。
第三种:TempData
使用TempData和使用ViewData方法是一样的。
Action代码如下:
public ActionResult TempDataWay(int id) { Book book = bookRepository.GetBook(id); TempData["Countries"] = new SelectList(PhoneValidator.Countries, book.Country); return View(book); }
View取值的代码如下:
<div class="editor-field"> <%= Html.DropDownList("Country", TempData["Countries"] as SelectList) %> <%: Html.ValidationMessageFor(model => model.Country) %> </div>
效果:第一种方式一样。
TempData和ViewData的区别
做个简单的测试看下看下TempData和ViewData的区别
public ActionResult Test1() { TempData["text"] = "1-2-3"; ViewData["text"] = "1-2-3"; return RedirectToAction("Test2"); } public ActionResult Test2() { string text1 = TempData["text"] as string; string text2 = ViewData["text"] as string; return View(); }
RedirectToAction跳转Action后,ViewData的值已经被清空,而TempData没有被清空,这是它们的区别之一。
希望本文所述对大家的asp.net程序设计有所帮助。
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]