【问题标题】:Dynamic CheckBoxFor with some disables一些禁用的动态复选框
【发布时间】:2012-04-25 08:28:34
【问题描述】:

我正在尝试创建一个动态 CheckBoxFor,其中某些项目被禁用。

这是禁用一切:

@Html.CheckBoxFor(m=>m.Checked, new { @disabled = "disabled"})

我试图创建这样的东西但没有成功:

@Html.CheckBoxFor(m=>m.Checked, new{ @disabled = @(Model.Disable ? "disabled" : "")})

请注意,我的模型有一个名为 Disabled 的属性和另一个 Checked。

【问题讨论】:

    标签: asp.net asp.net-mvc-3 checkbox


    【解决方案1】:

    它不起作用,因为 disabled 属性会禁用 CheckBox,无论它的值是什么。

    我不确定如何在一行中做到这一点,但这里有一个解决方案:

    @if(Model.Disabled)
    { 
        @Html.CheckBoxFor(m=>m.Checked, new { @disabled = "disabled"})
    }
    else
    {
        @Html.CheckBoxFor(m=>m.Checked)
    }
    

    一个潜在的 Html 助手扩展:

    public static MvcHtmlString CheckBoxFor<TModel>(
            this HtmlHelper<TModel> helper,
            Expression<Func<TModel, bool>> expression,
            object htmlAttributes,
            bool isDisabled)
    {
        var dic = htmlAttributes.GetType()
                 .GetProperties()
                 .ToDictionary(p => p.Name, p => p.GetValue(htmlAttributes, null));
    
        if (isDisabled)
            dic["disabled"] = "disabled";
    
        return helper.CheckBoxFor(expression, dic);
    }
    

    【讨论】:

    • 如果我想定义选中/未选中。大量的“如果”会产生难以阅读的代码
    • @Custódio 我编辑了我的答案。也就是说,Checked/not checked 已经包含在您的 Checked 变量中,因此您不必明确定义它。
    • @JonathanGreenstreet - 你应该发布一个新的答案,而不是试图重写这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多