2013-06-12 34 views
1

在我看来,如果字段中存在错误,我需要设置字段以突出显示红色。我通过字段列表中错误从控制器,类条件设定为errorField如果有匹配:ASP.NET MVC - 更改字符串值在设置时呈现

<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中,但是我觉得这只是一个修复它的方法(理所当然,我处理条件CSS的方式可能首先是hacky)。

编辑:

基于大卫的答案,这是我如何着手处理它:

模型

我添加了一个列表ErrorFields属性。 也基本上加入相同的方法,得到大卫,除了由于它处理不同的字段,它是:

public string ErrorCode(string field) 
{ 
    return ErrorFields.Contains(field) ? "errorField" : ""); 
} 

代替传递错误字段到ViewBag控制器,它把它传递给ErrorFields在模型内。

在视图中,基本上如大卫给:

class="@form.ErrorCode("Field1")" 

而且它适当地发挥作用。

+0

这是应该在模型上,而不是在视图中的类型。该视图应该绑定到模型上的数据,模型应该在内部设置其成员。 – David

+0

很酷。就像我说的,我觉得首先它可能是个黑客。你知道我在哪里可以找到类似于这个使用模型正确的例子吗? – Robert

回答

1

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

对于您的情况,您可以在模型(或类似的名称)上拥有ErrorClass属性。事情是这样的:

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

然后在视图中你会绑定到该属性:

class="@Model.ErrorClass" 

不知道更多关于你的模型,它不可能比这更具体。在这种情况下可能有多个类,这可能会调用某种类的集合,或者可能将错误指示符放在父模型中有一个集合的子模型上。这也有可能(在这种情况下甚至可能)有更简单的内置验证功能,可以实现您要查找的内容。

的观点是,在一般情况下,任何时候你尝试做这样的结构在您的视图:

var something = "a value"; 

然后有一个很好的机会,你不正确使用的观点,应该把该而是在模型中。

相关问题