C# 在Razor编辑器模板中启用/禁用表单控件

C# 在Razor编辑器模板中启用/禁用表单控件,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个编辑器模板,其中一个表单控件被禁用: @Html.TextBoxFor(m => m.MyField, new {@class = "form-control", disabled="disabled"}) 编辑器模板在多个视图中使用,一个视图需要启用文本框,而在其他视图中需要禁用文本框 是否可以参数化模板,以便根据视图启用/禁用控件?根据注释中的建议,我能够解决这个问题,即使用获取额外视图数据的编辑器Formodel重载 在EditorTemplate中: @((bool)Vi

我有一个编辑器模板,其中一个表单控件被禁用:

@Html.TextBoxFor(m => m.MyField, new {@class = "form-control", disabled="disabled"})
编辑器模板在多个视图中使用,一个视图需要启用文本框,而在其他视图中需要禁用文本框


是否可以参数化模板,以便根据视图启用/禁用控件?

根据注释中的建议,我能够解决这个问题,即使用获取额外视图数据的
编辑器Formodel
重载

在EditorTemplate中:

@((bool)ViewData["MyFieldEnabled"] ?
    Html.TextBoxFor(m => m.MyField, new { @class = "form-control" }) :
    Html.TextBoxFor(m => m.MyField, new { @class = "form-control", disabled = "disabled" }))
他认为:

@Html.EditorForModel(new { MyFieldEnabled = false })

在视图模型中添加一个
DisableForm
属性?@stuartd在这种情况下创建两个视图模型不是更好吗?根据您的情况,您会选择哪个视图模型。您可以这样做。
EditorFor()
方法有一个for
additionalViewData
,因此您可以将一个值传递给模板,并使用它有条件地呈现attribute@StephenMuecke假设OP使用MVC 5.1或更高版本,则可以使用
EditorFor
重载。但是,在MVC4及以下版本上,应该创建一个返回
TextBoxFor
的自定义HTML帮助程序,因为
EditorFor
在以前的版本中不支持
additionalViewData
属性。