how do I set disabled attribute on html textbox in asp.net-mvc?

前端 未结 3 630
走了就别回头了
走了就别回头了 2021-01-05 05:12

I am trying to dynamically set the disabled attribute on the html textbox and having issues

I tried this in my view:

 string disabledString = \"\";
          


        
相关标签:
3条回答
  • 2021-01-05 05:39

    I think you want to omit the disabled attribute altogether when you want it to be enabled. Older browsers would look at the following and disable the text boxes:

    <input type="text" disabled></input>
    

    In other words in older HTML the ="disabled" was not necessary so for compatibility reasons you should just omit the attribute if you want it to render right. I'm not sure what happens if you try a strict DOCTYPE, though.

    0 讨论(0)
  • 2021-01-05 05:44

    This was ugly for us, due to the fact that the HTML spec is lousy here.

    Basically in our view code we had some logic like this:

    bool isPlatformOwner = false;
    
    object disabledAttributes = new { @disabled="disabled", @readonly="readonly" };
    
    //omitted code setting isPlatformOwner    
    
        if (isPlatformOwner)
        {
            disabledAttributes = new { };
        }
    

    Then, for our controls, we had this:

    <%=Html.CheckBoxFor(f => f.AddToReleaseIndicator, disabledAttributes)%>
    

    Anonymous types saved us here, but, like I said, it got a little ugly.

    0 讨论(0)
  • 2021-01-05 05:58

    Actually it is possible to write an Extension class to the HtmlHelper to do this but you have to implement many overrides so the quickest solution I found was to write a dictionary extension.

    You can use below class for this:

    public static class DictionaryExtensions
    {
        public static Dictionary<string, object> WithAttrIf(this Dictionary<string,object> dictionary,bool condition, string attrname, object value)
        {
            if (condition)
                dictionary[attrname] = value;
    
            return dictionary;
        }
    
        public static Dictionary<string, object> WithAttr(this Dictionary<string, object> dictionary, string attrname, object value)
        {
    
            dictionary[attrname] = value;
    
            return dictionary;
        }
    }
    

    To use it, import the class in your view and your view code looks like this:

    @Html.TextBoxFor(m => m.FirstName,  new Dictionary<string, object>().WithAttr("class","input-large").WithAttrIf(!string.IsNullOrWhiteSpace(Model.FirstName),"readonly","yes"))
    

    You can add as many attributes as you wish since the extension method adds the value to the dictionary and returns the dictionary itself

    0 讨论(0)
提交回复
热议问题