如何使用html助手和asp.net mvc中的自定义显示视图在条件下创建只读
本文关键字:显示 自定义 视图 只读 创建 条件下 mvc html 何使用 net asp | 更新日期: 2023-09-27 18:16:33
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)** })
仅当显式指定或未指定readonly(或disabled(时才有效。自定义助手不适合
为什么不能这样做:
@if (IsReadOnly(Model.IsClosed))
{
@Html.TextBoxFor(model => model.RequestType, new { @readonly = "readonly" })
}
else
{
@Html.TextBoxFor(model => model.RequestType)
}
不要尝试暴力。我同意你不希望你的表单代码充斥着多个重复块。
我建议使用上面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;
}