ASP.NET MVC - 更改字符串值会在设置时呈现它

时间:2013-06-12 17:02:30

标签: asp.net-mvc-4

在我看来,如果字段中有错误,我需要设置一个字段以突出显示红色。我从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")"

它运作正常。

1 个答案:

答案 0 :(得分:1)

请勿在视图中执行此操作,在模型上执行此操作。

在您的情况下,您可以在模型上具有ErrorClass属性(或类似名称的东西)。像这样:

public string ErrorClass
{
    get
    {
        return errorFields.Contains("Field1") ? "errorField" : string.Empty;
    }
}

然后在视图中,您将绑定到该属性:

class="@Model.ErrorClass"

如果不了解您的模型,就不可能比这更具体。在这种情况下,可能存在多个类,这可能需要某种类型的集合,或者可能将错误指示符放在父模型中存在集合的子模型上。它也可能(在这种情况下甚至可能)有更简单的内置验证功能,可以实现您正在寻找的东西。

一般来说,只要您尝试在视图中执行此类构造,

var something = "a value";

然后您很有可能错误地使用了视图,而应将其放入模型中。