在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值。用法不复杂,这里简单做一个记录。

  • 首先我们要定义一个 Model ,用户在 DropDownList 中选择指定的值赋给属性 ReadyTimeHour
public class EricSunModel
{
public string ReadyTimeHour { get; set; }
}
  • Model定义完毕之后,接下来处理Controller的逻辑
  • 【注:这里用了ViewData来记录DropDownList中所要显示的所有列表数值】
public ActionResult EricSunAction()
{
EricSunModel esModel = new EricSunModel();
esModel.ReadyTimeHour = "00"; GenerateReadyTimeViewData(); return View(esModel);
} private void GenerateReadyTimeViewData()
{
ViewData["HourList"] = GetTimeHourList();
} private List<SelectListItem> GetTimeHourList()
{
List<SelectListItem> hourList = new List<SelectListItem>(); for (int i = 0; i < 24; i++)
{
if (i < 10)
{
hourList.Add(new SelectListItem { Text = "0" + i.ToString(), Value = "0" + i.ToString() });
}
else
{
hourList.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() });
}
} return hourList;
}
  • 接下来我们在View中可以用下面一行代码来绑定DropDownList
  • 【注:第一个参数为绑定Model中的属性,即-->要为此属性赋值】
  • 【注:第二个参数为DropDownList的所有数据源】
@Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>)
  • 截图如下所示

  

  • 如果我们想在DropDownList中的最顶端添加一个默认值的话,请模仿下面的写法:添加第三个参数
@Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>, "---Select---")
  • 截图如下所示:
  • 这里涉及到如何缓存DropDownList的所有数值问题(特别是提交表单,验证不通过,需要再次返回本页面的情况),如下假设Model中包含属性ReadyTimeHourList(是一个List<SelectListItem>),由于页面中没有控件对此数据进行绑定,那么在提交表单之后传回给actionmodel中将收集不到此数值,我们用HiddenFor在页面中去缓存List的数值是不能成功的(将括号中的值换作ViewData["HourList"]也是行不通的),原因是HiddenFor只能缓存单个数值
@Html.HiddenFor(m => m.ReadyTimeHourList)
  • 既然用页面控件缓存的方式行不通,如果解决上述问题呢?请看如下代码,如果验证不能通过,那么需要重新绑定ViewData["HourList"]的数值
  • 【实际上这里涉及到了ViewData生命周期的问题,由于提交表单之后,代码进入了如下的Action中,超出了原来的ViewData的声明周期,因此原来保存的ViewData的值将失效,所以需要再次的重新绑定】
[HttpPost]
public ActionResult EricSunAction(EricSunModel model)
{
if (!ModelState.IsValid)
{
GenerateReadyTimeViewData();
return View(model);
} // model.ReadyTimeHour; return RedirectToAction("OtherActionName");
}
  • 这里提供另外的一个常用知识点:ViewBag 与 ViewData 以及 TempData 的区别。请看如下链接:

http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

转:Asp.Net MVC中DropDownListFor的用法的更多相关文章

  1. Asp.Net MVC中DropDownListFor的用法(转)

    2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T  List<T>的第一个 ...

  2. Asp.Net MVC中DropDownListFor的用法

    在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...

  3. ASP.NET MVC中多种ActionResult用法总结

    最近一段时间做了个ASP.NET MVC4.0的项目,项目马上就要结束了,今天忙里偷闲简单总结一下心得: 1. 如果Action需要有返回值的话,必须是ActionResult的话,可以返回一个Emp ...

  4. ASP.NET MVC中Area的另一种用法

    ASP.NET MVC中Area的另一种用法 [摘要]本文只是为一行代码而分享 context.MapRoute("API", "api/{controller}/{ac ...

  5. [摘]在ASP.NET MVC中使用DropDownList

    在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...

  6. 在 ASP.NET MVC 中使用 HTML Helpers 的那些事

    在 ASP.NET MVC 中使用 HTML Helpers 方法,可以返回得到标准的 HTML 标签,就像 <input>.<button> 或者 <img> 等 ...

  7. ASP.NET MVC中使用DropDownList

    在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...

  8. Ext.Net学习笔记24:在ASP.NET MVC中使用Ext.Net

    在前面的笔记中已经介绍了如何在ASP.NET WebForm中使用Ext.Net,由于这个系列一直在WebForm中使用,所以并没有涉及到ASP.NET MVC中的用法. 如果你要在ASP.NET M ...

  9. 在ASP.NET MVC中使用DropDownList

    在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...

随机推荐

  1. Android ExpandableListActivity的简单介绍及小例子

    Android中常常要用到ListView,但也经常要用到ExpandableListView,ListView是显示列表,而ExpandableListView显示的是分类的列表: 下面用一个例子来 ...

  2. bzoj1148

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1148 很常见的排序贪心题...... 假设我们得到了一个最优序列,记s[n]=w[1]+w[2 ...

  3. EBS Workfow常用表

    1.Workflow Definition Tables WF_ITEM_TYPES WF_ACTIVITIES WF_MESSAGES WF_ITEM_ATTRIBUTES WF_ACTIVITY_ ...

  4. 介绍几个移动web app开发框架

    jQuery Mobile jQuery Mobile框架能够帮助你快速开发出支持多种移动设备的Mobile应用用户界面.jQuery Mobile最新版本是1.4.0,默认主题采用扁平化设计风格.j ...

  5. bzoj1047-理想的正方形(二维单调队列)

    题意: 给一个矩阵,给出行列和每个数,再给出一个N,求出所有N*N的子矩阵中最大值最小值之差的最小值解析: 暴力枚举肯定不行,这题可以用二维单调队列做,把同一行的连续N个点缩成一个点保存最大最小值预处 ...

  6. vmplayer中的fedora20无法进入图形界面

    新装了台fedora20的虚拟机,安装升级了一些东西后.启动时过了fedora的logo画面后就是黑屏. 也没提示不论什么错误,好在shell还能进去.查看/var/log/anaconda/sysl ...

  7. StretchDIBits使用方法

    转自:http://blog.csdn.net/giantchen547792075/article/details/6996011 StretchDIBits 函数把DIB.JPEG.PNG图像中一 ...

  8. JMeter分布式性能测试

    利用JMeter进行负载测试的时候,使用单台机器模拟测试超过1000个行程的并发就有些力不从心,在执行的过程中,JMeter自身会自动关闭,要解决这个问题,可以使用分布式测试,运行多台机器运行所谓的  ...

  9. Go程序GC优化经验分享

    http://1234n.com/?post/yzsrwa 最近一段时间对<仙侠道>的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验. 游戏第一次上线的时候,大部分精力都投 ...

  10. [RxJS] Completing a Stream with TakeWhile

    Subscribe can take three params: subscribe( (x)=> console.log(x), err=> console.log(err), ()=& ...