将enum传递给html.Radio按钮,用于MVC 3?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (158)

我有一个名为ActionStatus的Enum,它有两个可能的值--open=0和Close=1

public enum ActionStatus
{
    Open,
    Closed
}

我希望在我的编辑和创建视图中生成单选按钮组,该视图使用枚举填充单选按钮,a)Create视图中的默认值,b)编辑视图中当前选择的选项。

我是否需要一个扩展方法,并且是否有人已经创建了一个扩展方法?

下面是我的模型类

namespace Actioner.Models
{
[MetadataType(typeof(MeetingActionValidation))]
public class MeetingAction
{
    [Key]
    public int MeetingActionId              { get; set; }       

    [Required]
    [Display(Name = "Description")]
    public string Description  { get; set; }

    [Required]
    [Display(Name = "Review Date")]
    public DateTime ReviewDate       { get ;set; }

    public int Status{ get; set; }

    [ScaffoldColumn(false)]
    public int MeetingId             { get; set; }


    //public virtual Meeting Meeting { get; set; }

    //public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<ActionUpdate> ActionUpdates { get; set; }

    public MeetingActionStatus ActionStatus { get; set; }

}

public enum MeetingActionStatus 
{
    Open,
    Closed
}

这就是我的观点

@model Actioner.Models.MeetingAction
@using Actioner.Helpers


<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.ReviewDate)
</div>
 <div class="editor-field">
@Html.EditorFor(model => model.ReviewDate)
@Html.ValidationMessageFor(model => model.ReviewDate)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">

 @Html.RadioButtonForEnum(x => x.ActionStatus)

</div>

这是我的创建控制器动作

public virtual ActionResult Create(int id)
    {

        var meetingAction = new MeetingAction
        {
            MeetingId = id,
            ReviewDate = DateTime.Now.AddDays(7)
        };

        ViewBag.Title = "Create Action"; 

        return View(meetingAction);
    } 

枚举在视图中显示得很好,但是当前选择的选项不会持久化到数据库中。

提问于
用户回答回答于

只需添加标签即可。

    public static class HtmlExtensions
{
    public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TProperty>> expression
    )
    {
        var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

        var names = Enum.GetNames(metaData.ModelType);
        var sb = new StringBuilder();
        foreach (var name in names)
        {

            var description = name;

            var memInfo = metaData.ModelType.GetMember(name);
            if (memInfo != null)
            {
                var attributes = memInfo[0].GetCustomAttributes(typeof(DisplayAttribute), false);
                if (attributes != null && attributes.Length > 0 )
                    description = ((DisplayAttribute)attributes[0]).Name;
            }
            var id = string.Format(
                "{0}_{1}_{2}",
                htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
                metaData.PropertyName,
                name
            );

            var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
            sb.AppendFormat(
                "<label for=\"{0}\">{1}</label> {2}",
                id,
                HttpUtility.HtmlEncode(description),
                radio
            );
        }
        return MvcHtmlString.Create(sb.ToString());
    }
}

和模型:

    public enum MeetingActionStatus                   
{

    [Display(Name = "Open meeting")]
    Open,

    [Display(Name = "Closed meeting")]
    Closed             
}          

热门问答

拯救小助理大作战1: 云+的活动由你来决定!?

青年码农

晨讯科技 · web前端开发高级工程师 (已认证)

公众号【青年码农】:有趣、有料,有深度、有广度、有热度。
活动形式 对于云的实际操作,之前关于云的基本都是文章、视频等形式来对技术的阐述,对于使用云的开发者来说,可能意义不大,而希望的是实际操作,毕竟实际操作遇到的问题才是真正要解决的问题 活动大纲(例) 主题:使用云开发搭建一个小程序或者提供一个后台接口 腾讯云提供了n多个服务,多数服...... 展开详请

实时音视频如何实现画中画的效果?

Cstar

腾讯 · 产品经理 (已认证)

推荐
开启大小画面双路编码模式的接口如下: iOS&Mac:enableEncSmallVideoStream Android:enableEncSmallVideoStream Windows(C++):enableSmallVideoStream Windows(C#):enab...... 展开详请

有没有可以提升运维效率的服务器管理软件,主要功能有哪些,求推荐?

The parameter `SecretKey` is not recognized?

zqfan

腾讯 · 高级工程师 (已认证)

推荐已采纳

报错的意思是参数SecretKey无法识别,接口实际未定义这个字段。

SecretKey是你的密钥,相当于你的账户密码,调用API时是不需要传递的。

桌面浏览器版和安卓版能进入一个实时音视频房间么?

人生的旅途辣鸡前端
推荐已采纳
https://cloud.tencent.com/document/product/647/43019 image.png ... 展开详请

智聆口语评测返回结果里面的评分为0?

1,音频文件要符合16khz采样率16bit位深单声道,如果是mp3文件码率要高于48kbps,否则评分可能会出现偏低或者0 2,VoiceType是否和传入的音频文件一致,文本和音频是否一致. 3,看下sessionId是否在每次评测的时候都是一样的结果导致的   4,在初次...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券