使用Razor动态禁用MVC 3中的表单字段

dal*_*ton 1 c# razor asp.net-mvc-3

我在Razor视图中有一个大型表单,并希望根据我传入的模型对象的状态禁用某些表单元素.因此必须定义一些逻辑来确定是否显示此元素,使其读取 - 仅限或使其可编辑.

我目前的想法是让我用那里的逻辑定义一些Razor @ helper,虽然我不确定这是否是最好的方法.有一些像 ...

@helper determineElementStatus(string modelProperty)
{
  if (modelProperty == someState) {
    @Html.TextBoxFor....etc
  }
}

@determineElementStatus(model.someProperty)
Run Code Online (Sandbox Code Playgroud)

事实上,我不确定这个观点是否正确.它表示逻辑,它改变了表单的外观,但它最好放在别处以及如何?帮助将不胜感激.

Man*_*kar 5

在视图中,您可以控制更改css的逻辑.例如,根据Model值的值,我创建displayMode并将其应用于Html.

  @{
        string isInherited = Model.IsInheritedValue ? "editor-field inherColor" : "editor-field";
        object displayMode = Model.IsDisabled ? new { @disabled = "disabled", @class = isInherited } : (object)new { @class = isInherited };
    }
Run Code Online (Sandbox Code Playgroud)

所以现在每当你表演

@Html.TextBoxFor(x => x.Value, displayMode)
Run Code Online (Sandbox Code Playgroud)

displayMode将确定如何显示它.希望这可以帮助.