c# एचटीएमएल हेल्पर के साथ कंडीशनल एचटीएमएल एट्रिब्यूट



asp.net-mvc razor (1)

मैं चेक बॉक्स को बनाने के लिए एक एचटीएमएल सहायक का प्रयोग कर रहा हूं। कुछ स्थिति लंबित, मैं HTML विशेषता ऑब्जेक्ट में disabled विशेषता जोड़ना चाहता हूं। मेरे पास निम्न कोड है:

@if (Model.IsAuthorized)
{
    @Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class" })
}
else
{
    @Html.CheckBoxFor(x => @Model.Property, new { @class = "input-class", @disabled = "disabled" })
}

मैं इस कोड को और अधिक संक्षिप्त करना चाहता हूं सशर्त ब्लॉक के बिना / एक पंक्ति में विशिष्ट HTML विशेषताओं को जोड़ने का कोई तरीका क्या है?


जब आप उपयोग कर सकते हैं

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

ऐसा करने के लिए कोड की एक पंक्ति में, आपके मामले में यह मॉडल बाइंडिंग असफल हो सकता है।

CheckBoxFor() विधि 2 इनपुट, value="True" साथ एक चेकबॉक्स और value="False" साथ एक छिपी इनपुट उत्पन्न करता है। ऐसे मामले में जहां Property का प्रारंभिक मान true और IsAuthorized true , परिणाम यह है कि चेकबॉक्स अक्षम है और कोई मान पोस्ट नहीं करेगा। हालांकि छिपे हुए इनपुट को आपके मॉडल में प्रस्तुत और बाँध किया जाएगा, जिसके परिणामस्वरूप Property false (जब यह true होनी चाहिए)

मॉडल को सही तरीके से बाध्य करने के लिए, आपको ब्लॉक की आवश्यकता होगी

@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 />
}




html-helper