在我看来,如果字段中有错误,我需要设置一个字段以突出显示红色。我从Controller传递错误的字段列表,如果匹配则有条件地将类设置为errorField:
<td>@(cssClass = errorFields.Contains("Field1") ? "errorField" : "") <input type="text" id="field1" name="field1" value="@form.Field1" class="@cssClass" style="width: 5em;" /></td>
这适用于设置类值,但问题是我还将其渲染为:
<td>errorField <input...>
显然,我不想让errorField在那里渲染。我该如何防止这种行为?我可以把它包装在一个隐藏的div中,但我觉得这只是一个修复它的hacky方式(授予,我处理条件CSS的方式可能首先是hacky)。
编辑:
根据David的回答,这就是我处理它的方式:
在模型中我添加了一个List ErrorFields属性。 除了由于它处理不同的字段外,基本上也添加了David给出的相同方法,它是:
public string ErrorCode(string field)
{
return ErrorFields.Contains(field) ? "errorField" : "");
}
而不是控制器将错误字段传递给ViewBag,而是将其传递给模型中的ErrorFields。
在视图中,基本上就像大卫所说:
class="@form.ErrorCode("Field1")"
它运作正常。
答案 0 :(得分:1)
请勿在视图中执行此操作,在模型上执行此操作。
在您的情况下,您可以在模型上具有ErrorClass
属性(或类似名称的东西)。像这样:
public string ErrorClass
{
get
{
return errorFields.Contains("Field1") ? "errorField" : string.Empty;
}
}
然后在视图中,您将绑定到该属性:
class="@Model.ErrorClass"
如果不了解您的模型,就不可能比这更具体。在这种情况下,可能存在多个类,这可能需要某种类型的集合,或者可能将错误指示符放在父模型中存在集合的子模型上。它也可能(在这种情况下甚至可能)有更简单的内置验证功能,可以实现您正在寻找的东西。
一般来说,只要您尝试在视图中执行此类构造,
var something = "a value";
然后您很有可能错误地使用了视图,而应将其放入模型中。