当前位置:编程学习 > asp >>

ASP.NET MVC为HtmlHelper添加一个RadioButtonList扩展方法

在前面一篇http://www.zzzyk.com/kf/201203/123222.html 文章中,我们通过对HtmlHelper的扩展简化了对DropDownList(Single-Line-Select)和ListBox(Multiple-Line-Select)的绑定,以及对作为数据源的列表进行单独维护。现在我们为HtmlHelper/HtmlHelper<Model>添加一个RadioButtonList/RadioButtonListFor扩展方法实现一组RadioButton的绑定。[源代码从这里/2012/0316/20120316090259232.rar
下载]
一、RadioButtonListFor的使用
我们先来显示一下扩展的RadioButtonListFor的方法的用法。如下所示的是作为Model的Person类型,其Gender(Male/Female)、MaritalStatus(Single/Married)和Country的选项列表通过独立的组件CodeManager进行单独维护。
   1: public class Person
   2: {
   3:     public string Name { get; set; }
   4:     public string Gender { get; set; }
   5:     [Display(Name = "Marital Status")]
   6:     public string MaritalStatus { get; set; }
   7:     public string Country { get; set; }
   8: }
在一个针对Person对象进行编辑的强类型View(以Person作为Model)中我们进行了如下的定义。RadioButtonListFor方的最后一个参数(“Gender”、“MaritalStatus”和“Country”)表示对应列表的类别。
   1: @using System.Web.UI.WebControls
   2: @model Person
   3: @{
   4:     ViewBag.Title = "Index";
   5: }
   6: @using (Html.BeginForm())
   7: {
   8:     <table id="container">
   9:         <tr>
  10:             <td class="label">@Html.LabelFor(m => m.Name):</td>
  11:             <td>@Html.EditorFor(m => m.Name)</td>
  12:         </tr>
  13:          <tr>
  14:             <td class="label">@Html.LabelFor(m => m.Gender):</td>
  15:             <td>@Html.RadioButtonListFor(m => m.Gender, "Gender")</td>
  16:         </tr>
  17:          <tr>
  18:             <td class="label">@Html.LabelFor(m => m.MaritalStatus):</td>
  19:             <td>@Html.RadioButtonListFor(m => m.MaritalStatus, "MaritalStatus")</td>
  20:         </tr>
  21:          <tr>
  22:             <td class="label">@Html.LabelFor(m => m.Country):</td>
  23:             <td>@Html.RadioButtonListFor(m => m.Country, "Country", RepeatDirection.Vertical)</td>
  24:         </tr>
  25:         <tr>
  26:             <td colspan="2"><input type="submit" value="Save" /></td>
  27:         </tr>     
  28:     </table>   
  29: }
下面这张图表示上面这个View在浏览器中呈现出来的样式,我们可以看到三组RadioButton被有效地生成出来。
 image 

二、维护选项列表的组件CodeManager
由于在一个应用中,作为绑定到“列表控件”上的选项列表可能会有很多,将它们进行单独地维护是一个理想的选择。作为模拟,我们创建了如下一个简单的CodeManager组件。我们将列表中的某个选项通过CodeDescription,其三个属性Code、Description分别表示其“值”和“显示文本”,Category表示类别(通过它对列表项进行分组)。CodeManager通过一个静态字段作为列表数据的存储,上面例子中使用到的三组列表维护于此。GetCodes方法用于返回指定“类别”的列表选项。
   1: public class CodeDescription
   2: {
   3:     public string Code { get; set; }
   4:     public string Description { get; set; }
   5:     public string Category{get;set;}
   6: 
   7:     public CodeDescription(string code, string description, string category)
   8:     {
   9:         this.Code = code;
  10:         this.Description = description;
  11:         this.Category = category;
  12:     }
  13: }
  14: public static class CodeManager
  15: {
  16:     private static CodeDescription[] codes = new CodeDescription[]
  17:     {
  18:         new CodeDescription("M","Male","Gender"),
  19:         new CodeDescription("F","Female","Gender"),
  20:         new CodeDescription("S","Single","MaritalStatus"),
  21:         new CodeDescription("M","Married","MaritalStatus"),
  22:         new CodeDescription("CN","China","Country"),
  23:         new CodeDescription("US","Unite States","Country"),
  24:         new CodeDescription("UK","Britain","Country"),
  25:         new CodeDescription("SG","Singapore","Country")
  26:     };
  27:     public static Collection<CodeDescription> GetCodes(string category)
  28:     {
  29:         Collection<CodeDescription> codeCollection = new Collection<CodeDescription>();
  30:         foreach(var code in codes.Where(code=>code.Category == category))
  31: &nbs

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,