ASP.NET MVC扩展带验证的单选按钮

 更新时间:2022年09月13日 08:31:38   作者:Darren Ji  
这篇文章实现了ASP.NET MVC扩展带验证的单选按钮功能,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在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值拼接作为元素的id
                    var 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 cities
                select 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)
    


    <input type="submit" value="提交"/>
}

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 轻量级ORM框架Dapper应用之实现DTO

    轻量级ORM框架Dapper应用之实现DTO

    本文详细讲解了使用Dapper实现DTO的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)

    asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)

    在.NET Framework中,System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。
    2010-10-10
  • DataAdapter执行批量更新的实例代码

    DataAdapter执行批量更新的实例代码

    这篇文章介绍了DataAdapter执行批量更新的实例代码,有需要的朋友可以参考一下,希望对你有所帮助
    2013-07-07
  • 如何在ASP.NET Core应用程序运行Vue并且部署在IIS上详解

    如何在ASP.NET Core应用程序运行Vue并且部署在IIS上详解

    这篇文章主要给大家介绍了关于如何运行Vue在ASP.NET Core应用程序并且部署在IIS上的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • Asp.Net 5分钟实现网页实时监控

    Asp.Net 5分钟实现网页实时监控

    在项目开发中经常会用到监控功能,下面通过本篇文章给大家介绍Asp.Net 5分钟实现网页实时监控,需要的朋友可以参考下
    2017-12-12
  • .NET CORE3.1实现微信小程序发送订阅消息

    .NET CORE3.1实现微信小程序发送订阅消息

    这篇文章主要介绍了.NET CORE3.1实现微信小程序发送订阅消息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 浅析.NET逻辑分层架构

    浅析.NET逻辑分层架构

    这篇文章主要介绍了.NET逻辑分层架构,分层架构的三个基本层次分别为:表示层、业务逻辑层和数据访问层,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • asp.net SqlHelper数据访问层的使用

    asp.net SqlHelper数据访问层的使用

    如果不使用数据访问层,那么你的代码里会出现很多SqlConnection、SqlCommand、SqlDataReader、Open、 Close……这些类和方法,而且代码量很大,让你不胜其烦,而且代码写起来,其实都是体力活,没有技术含量。
    2008-09-09
  • ASP.NET MVC5添加验证(4)

    ASP.NET MVC5添加验证(4)

    这篇文章主要介绍了ASP.NET MVC5添加验证,需要的朋友可以参考下
    2015-09-09
  • 如何ASP.NET Core Razor中处理Ajax请求

    如何ASP.NET Core Razor中处理Ajax请求

    本篇技术文章主要给大家讲述了如何ASP.NET Core Razor中处理Ajax请求这方面的知识点,有兴趣的朋友参考下。
    2018-01-01

最新评论