2013-06-12 64 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"; 

然後有一個很好的機會,你不正確使用的觀點,應該把該而是在模型中。

相關問題