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)
{
//獲取元數(shù)據(jù)
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);
//創(chuàng)建單選按鈕
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());
}
}
}假設(shè),現(xiàn)在有一個View Model,其中的一個屬性要求必須。
using System.ComponentModel.DataAnnotations;
namespace MvcApplication1.Models
{
public class Vm
{
[Required(ErrorMessage = "必填")]
public int CityId { get; set; }
}
}以下City類的集合將作為所有Radio Button的數(shù)據(jù)源。
namespace MvcApplication1.Models
{
public class City
{
public int Id { get; set; }
public string Name { get; set; }
}
}在HomeController中,提供一個Action方法啊,把City的集合轉(zhuǎn)換成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="提交"/>
}以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- 使用EF Code First搭建簡易ASP.NET MVC網(wǎng)站并允許數(shù)據(jù)庫遷移
- ASP.NET MVC實現(xiàn)橫向展示購物車
- ASP.NET MVC獲取多級類別組合下的產(chǎn)品
- ASP.NET MVC使用正則表達式驗證手機號碼
- ASP.NET?MVC實現(xiàn)登錄后跳轉(zhuǎn)到原界面
- ASP.NET?MVC使用jQuery的Load方法加載靜態(tài)頁面及注意事項
- ASP.NET MVC解決上傳圖片臟數(shù)據(jù)的方法
- ASP.NET?MVC使用JSAjaxFileUploader插件實現(xiàn)單文件上傳
- ASP.NET?MVC使用Boostrap實現(xiàn)產(chǎn)品展示、查詢、排序、分頁
相關(guān)文章
記錄游客頁面訪問IP的簡易實現(xiàn)代碼 (asp.net+txt)
記錄游客頁面訪問IP的簡易實現(xiàn) (asp.net for notepad)2010-01-01
ASP.net 動態(tài)加載控件時一些問題的總結(jié)
經(jīng)常見到有人說在ASP.net中不要使用動態(tài)控件,我想主要的原因在于使用動態(tài)控件會帶來一些問題,在做項目的過程中,我將由動態(tài)加載控件引發(fā)的總是作了一個小小的總結(jié).2009-04-04
時間輕松學會.NET Core操作ElasticSearch7的方法
這篇文章主要介紹了時間輕松學會.NET Core操作ElasticSearch7,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
ASP.NET實現(xiàn)用圖片進度條顯示投票結(jié)果
ASP.NET實現(xiàn)用圖片進度條顯示投票結(jié)果...2007-06-06

