Conditional html attribute with Html Helper

后端 未结 2 1741
南方客
南方客 2020-12-02 02:07

I am using a Html helper to create a checkbox. Pending some condition, I want to add the disabled attribute to the htmlAttribute object. I have the following co

相关标签:
2条回答
  • 2020-12-02 02:46

    Try the below code:

    @{
     var attr = new { @class = "input-class" };
     if (Model.IsAuthorized)
     {
        attr = new { @class = "input-class", @disabled = "disabled" };
     }
    }
    @Html.CheckBoxFor(x => @Model.Property, attr)
    
    0 讨论(0)
  • 2020-12-02 02:48

    While you could use

    @Html.CheckBoxFor(m => m.Property, Model.IsAuthorized ? (object)new { @class = "input-class", disabled = "disabled" } : (object)new { @class = "input-class"});
    

    to do this in one line of code, in your case it may result in model binding failing.

    The CheckBoxFor() method generates 2 inputs, a checkbox with value="True" and a hidden input with value="False". In the case where the initial value of Property is true and IsAuthorized is true the result is that the checkbox is disabled and will not post a value. However the hidden input will be submitted and bind to your model, resulting in Property being false (when it should be true)

    In order to handle model binding correctly, you will need the if block

    @if (Model.IsAuthorized)
    {
        @Html.CheckBoxFor(x => m.Property, new { @class = "input-class" })
    }
    else
    {
        @Html.HiddenFor(m => m.Property) // necessary to post back the initial value
        <input type="checkbox" @(Model.Property ? "checked" : null) disabled />
    }
    
    0 讨论(0)
提交回复
热议问题