Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net mvc中使用html helper和自定义displayview在条件下创建只读?_C#_Asp.net Mvc_Asp.net Mvc 4_Html Helper - Fatal编程技术网

C# 如何在asp.net mvc中使用html helper和自定义displayview在条件下创建只读?

C# 如何在asp.net mvc中使用html helper和自定义displayview在条件下创建只读?,c#,asp.net-mvc,asp.net-mvc-4,html-helper,C#,Asp.net Mvc,Asp.net Mvc 4,Html Helper,一,。例如,我有下一个助手,我需要设置状态为只读或禁用 @Html.TextBoxFor(model => model.RequestTypeAdditional, new { @class = "form-control", @autocomplete = "off" , **readonly = IsReadOnly(Model.IsClosed)** }) @functions { private static string IsReadOnly( bool isCl

一,。例如,我有下一个助手,我需要设置状态为只读或禁用

@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";
    }
}
二,。我有模型的自定义视图:-

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

这不会影响你的状态。最后,您将拥有一个控件。如果控件中有readonly属性,则它将呈现为只读文本框。