搜索

查看: 3044|回复: 11

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

[复制链接]
发表于 2023-5-4 11:29:55 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:29:55 3044 11 看全部
在ASP.NET MVC4中,HtmlHelper为我们提供了Html.RadioButton()方法用来显示Radio Button单选按钮。如果想显示一组单选按钮,通常的做法是遍历一个集合把每个单选按钮显示出来。本篇尝试写一个扩展方法用来展示一组带验证的单选按钮。

202291383214165.png

202291383214165.png


首先来扩展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(this HtmlHelper htmlHelper,
            Expression> expression, IEnumerable 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("{0}{1}", 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 cities = new List()
            {
                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。

   
   
    @ViewBag.Title
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")

    @RenderBody()
   
    @RenderSection("scripts", required: false)

在Home/Index.chtml中,使用扩展方法显示Radio Button组。
@model MvcApplication1.Models.Vm
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
   
    .RadioButton { float:left; }
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id = "addForm"}))
{
    @Html.RadioButtonListFor(v => v.CityId, ViewData["c"] as IEnumerable)
    @Html.ValidationMessageFor(v => v.CityId)
   

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

使用道具 举报

发表于 2023-6-28 18:05:49 | 显示全部楼层
Gordon520 2023-6-28 18:05:49 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-6-28 21:19:31 | 显示全部楼层
丁侦球 2023-6-28 21:19:31 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
回复

使用道具 举报

发表于 2023-6-29 02:32:45 | 显示全部楼层
冀苍鸾 2023-6-29 02:32:45 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-6-29 14:35:56 | 显示全部楼层
普通人物怨 2023-6-29 14:35:56 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 16:09:23 | 显示全部楼层
井底燕雀傥 2023-6-29 16:09:23 看全部
这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-29 22:09:49 | 显示全部楼层
贺老师 2023-6-29 22:09:49 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
回复

使用道具 举报

发表于 2023-6-29 22:20:08 | 显示全部楼层
幸福341 2023-6-29 22:20:08 看全部
这东西我收了!谢谢楼主!知鸟论坛真好!
回复

使用道具 举报

发表于 2023-6-29 23:34:19 | 显示全部楼层
惜颜705 2023-6-29 23:34:19 看全部
论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
回复

使用道具 举报

发表于 2023-6-30 00:22:07 | 显示全部楼层
落败的青春阳落s 2023-6-30 00:22:07 看全部
楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 知鸟论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表