[英]How to create a readonly on the condition using html helper and using custom displayview in asp.net mvc?
1.例如,我有下一個助手,我需要將狀態設置為只讀(或禁用)
@Html.TextBoxFor(model => model.RequestTypeAdditional, new { @class = "form-control", @autocomplete = "off" , **readonly = IsReadOnly(Model.IsClosed)** })
@functions
{
private static string IsReadOnly( bool isClosed)
{
if (RoleHelpers.IsInRoles("Master"))
return "readonly";
else if (RoleHelpers.IsInRoles("Operator") && (!isClosed))
return string.Empty;
else if (RoleHelpers.IsInRoles("Operator") && (isClosed))
return "readonly";
else if (RoleHelpers.IsInRoles("Administrator"))
return string.Empty;
else
return "readonly";
}
}
2.我有模型的自定義視圖:-
@Html.DisplayFor(model => model.RequestType, new { **@readonly = IsReadOnly(Model.IsClosed)** })
僅在顯式指定(或未指定)只讀(或禁用)的情況下有效。 定制助手不適合
您為什么不能這樣做:
@if (IsReadOnly(Model.IsClosed))
{
@Html.TextBoxFor(model => model.RequestType, new { @readonly = "readonly" })
}
else
{
@Html.TextBoxFor(model => model.RequestType)
}
不要嘗試蠻力。 我同意您不希望您的表單代碼因多個重復塊而blo腫。
我建議將上面的Sergey Shabanov
建議的代碼放入顯示模板中。 然后在我們的模型中使用UIHint
鏈接到顯示模板。 Presto,代碼完整,表單代碼沒有膨脹。 您可以保留DisplayFor
,通常它可以解析為一行UI代碼。 最后,您將實現保留在一個位置,因此更改它不容易出錯。
我也認為這可能是實現強類型TextBox自定義幫助程序的最佳方法之一:
public static MvcHtmlString TextBoxFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>>expression, bool isReadonly, bool isAutocomplete)
{
MvcHtmlString html = default(MvcHtmlString);
if (isReadonly)
{
html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, new { @class = "readOnly form-control", @autocomplete = isAutocomplete ? "on" : "off", @readonly = "read-only" });
}
else
{
html = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, new { @class = "readOnly form-control", @autocomplete = isAutocomplete ? "on" : "off" });
}
return html;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.