c# - from - mvc layout



سمة هتمل مشروط مع مساعد هتمل (1)

أنا باستخدام مساعد هتمل لإنشاء خانة الاختيار. في انتظار بعض الشروط، أريد إضافة السمة 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.CheckBoxFor(m => m.Property, Model.IsAuthorized ? (object)new { @class = "input-class", disabled = "disabled" } : (object)new { @class = "input-class"});

للقيام بذلك في سطر واحد من التعليمات البرمجية، في حالتك قد يؤدي إلى فشل نموذج ملزمة.

تقوم طريقة CheckBoxFor() بإنشاء مدخلين، مربع اختيار مع value="True" وإدخال مخفي مع value="False" . في الحالة التي تكون فيها القيمة الأولية Property true و IsAuthorized true النتيجة هي أن خانة الاختيار معطلة ولن نشر قيمة. ومع ذلك سيتم تقديم المدخلات الخفية وربط النموذج الخاص بك، مما يؤدي إلى Property false (عندما ينبغي أن يكون true )

من أجل التعامل مع نموذج ملزمة بشكل صحيح، سوف تحتاج إلى كتلة if

@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