在ASP.NET MVC下扩展一个带验证的RadioButtonList
在ASP.NET MVC4中,HtmlHelper为我们提供了Html.RadioButton()方法用来显示Radio Button单选按钮。如果想显示一组单选按钮,通常的做法是遍历一个集合把每个单选按钮显示出来。本篇尝试写一个扩展方法用来展示一组带验证的单选按钮。

首先来扩展HtmlHelper,扩展方法中接收一个SelectListItem的集合,遍历这个集合把每个单选按钮显示出来,并且让这些单选按钮具有不同的id属性值。
using System.Collections.Generic;using System.Linq.Expressions;using System.Text;using System.Web.Mvc.Html;namespace System.Web.Mvc{public static class HtmlExtensions{public static MvcHtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> list){//获取元数据var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);var sb = new StringBuilder();if (list != null){foreach (var item in list){//把属性名和集合元素的Value值拼接作为元素的idvar id = string.Format("{0}_{1}", metaData.PropertyName, item.Value);//创建单选按钮var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text));var radio = htmlHelper.RadioButtonFor(expression, item.Value, new {id = id}).ToHtmlString();sb.AppendFormat("<div class=\"RadioButton\">{0}{1}</div>", radio, label);}}return MvcHtmlString.Create(sb.ToString());}}}
假设,现在有一个View Model,其中的一个属性要求必须。
using System.ComponentModel.DataAnnotations;namespace MvcApplication1.Models{public class Vm{[Required(ErrorMessage = "必填")]public int CityId { get; set; }}}
以下City类的集合将作为所有Radio Button的数据源。
namespace MvcApplication1.Models{public class City{public int Id { get; set; }public string Name { get; set; }}}
在HomeController中,提供一个Action方法啊,把City的集合转换成SelectListItem集合传递给视图。
using System.Collections.Generic;using System.Linq;using System.Web.Mvc;using MvcApplication1.Models;namespace MvcApplication1.Controllers{public class HomeController : Controller{public ActionResult Index(){List<City> cities = new List<City>(){new City(){Id = 1, Name = "青岛"},new City(){Id = 2, Name = "济南"},new City(){Id = 3, Name = "平度"}};ViewData["c"] = from c in citiesselect new SelectListItem() {Text = c.Name, Value = c.Id.ToString()};return View(new Vm());}[HttpPost]public ActionResult Index(Vm vm){if (ModelState.IsValid){return Content(vm.CityId.ToString());}else{return View(vm);}}}}
在_Layout.csthml中,必须具备客户端验证js。
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width" /><title>@ViewBag.Title</title>@Styles.Render("~/Content/css")@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/jqueryval")</head><body>@RenderBody()@RenderSection("scripts", required: false)</body>
在Home/Index.chtml中,使用扩展方法显示Radio Button组。
@model MvcApplication1.Models.Vm@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}<style type="text/css">.RadioButton { float:left; }</style>@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id = "addForm"})){@Html.RadioButtonListFor(v => v.CityId, ViewData["c"] as IEnumerable<SelectListItem>)@Html.ValidationMessageFor(v => v.CityId)<br/><br/><input type="submit" value="提交"/>}
在ASP.NET MVC下扩展一个带验证的RadioButtonList的更多相关文章
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- SNF快速开发平台MVC-EasyUI3.9之-ueditor富文本编辑在 asp.net MVC下使用步骤
mvc项目中用到了这个富文本编辑就试着把遇到的问题个使用步骤在这里记录一下,希望大家少走弯路. 1.首先我们先下载net版本的uediot 2.然后把整个文档拷贝到我们的项目中,记得是整个 把下载的文 ...
- ASP.NET MVC 5 - 添加一个模型
在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术En ...
- Response.End()在Webform和ASP.NET MVC下的表现差异
前几天在博问中看到一个问题--Response.End()后,是否停止执行?MVC与WebForm不一致.看到LZ的描述后,虽然奇怪于为何用Response.End()而不用return方式去控制流程 ...
- ASP.NET MVC下使用AngularJs语言(六):获取下拉列表的value和Text
前面Insus.NET有在Angularjs实现DropDownList的下拉列表的功能.但是没有实现怎样获取下拉列表的value和text功能. 下面分别使用ng-click和ng-change来实 ...
- ASP.NET MVC下使用AngularJs语言(五):ng-selected
这次学习ng-selected语法,这个是为DropDownList下拉列表显示默认选项. 演示从下面步骤开始 1,新建一个model: 上面#14行代码的property,数据类型为bool.即是存 ...
随机推荐
- MySQL删除数据后磁盘空间的释放情况【转】
OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE TABLE 是指对表进行优化.如果已经删除 ...
- artDialog4.1.7 摘自网络
jquery.artDialog.source.js学习 1 关键的对象关系 art = jQuery = $ function artDialog() {...} artDialog.fn = ar ...
- 使用@SpringBootApplication注解
很多Spring Boot开发者总是使用@Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类. 由于这些注解被如此 ...
- 解决阿里云安骑士漏洞警告:wordpress WPImageEditorImagick 指令注入漏洞
解决:wordpress WPImageEditorImagick 指令注入漏洞 前些天在阿里云服务器上安装了wordpress,阿里云提示有wordpress WP_Image_Editor_Ima ...
- Ext.util.Format.date 时间格式的设置与转换
Ext.util.Format.date 如下这段简单的代码: var d = new Date(value.time); var s = Ext.util.Format.date(d, 'Y-m- ...
- java 异常的限制
一. 1.) 在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常 2.) 在基类构造器声明的异常,在子类必须抛出,子类的构造器可以抛出任何异常,但是必须抛出基类构造器的异常 3.) 在基类 ...
- linux网络管理基本命令
1.last 显示所有用户的登录情况 2.lastlog 显示那些用户有登录过,那些用户从来没登录过 3.traceroute 探测我指定网站的路径,来跟踪路由 .如:traceroute www ...
- The web application [ ] registered the JDBC driver [net.sourceforge.jtds.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver
出现以下错误时,我找了很多方法,都未解决,网上有很多,最后我实在无奈,怀疑会不会是Tomcat的原因,更换了一个版本之后就好了.The web application [ ] registered t ...
- Windows下使用 Sublime Text + MinGW 搭建C/C++开发环境
下载并安装 Sublime Text 点击此处从官网下载适合自己的Windows系统的Sublime Text 下载好后双击进行安装(一路next就好啦) 下载 MinGW 点击此处下载MinGW 下 ...
- 什么是新生代 GC 和老年代 GC
GC 经常发生的区域是堆区,堆区还可以细分为新生代.老年代 jvm堆示意图 新生代 一个 Eden 区 两个 Survivor 区 老年代 默认 新生代(Young)与老年代(Old)的比例的值为 1 ...