2013-08-30 74 views
4

最近,我一直在努力在我的項目中啓用更多的Visual Studio代碼分析規則。但是,我不斷碰撞規則CA2227:「收集屬性應該是隻讀的」。CA2227和ASP.NET Model Binding

說我有這樣一個模型類:

public class Foo 
{ 
    public string Name { get; set; } 

    public List<string> Values { get; set; } 
} 

我有一種強烈的映射視圖頁面:

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.Name) 
    @Html.EditorFor(m => m.Name) 
    for (int i = 0; i < Model.Values.Count; i++) 
    { 
     <br /> 
     @Html.LabelFor(m => Model.Values[i]); 
     @Html.EditorFor(m => Model.Values[i]); 
    } 

    <button type="submit">Submit</button> 
} 

在ASP.NET MVC,我可以寫在我的行動控制器將這個輸入自動綁定到一類Foo類型:

[HttpPost] 
public ActionResult ProcessForm(Foo model) 
{ 
    return View(model); 
} 

在p用這種方法處理這個問題,就是我的List<string>汽車屬性違反了規則CA2227。如果我沒有進行模型綁定,我可以使屬性只讀並在其他地方填充集合。但是,該方法不適用於默認的模型綁定器。現在,我剛剛在視圖模型中添加了抑制消息。

有沒有一種方法可以綁定模型中的項目集合而不違反CA2227?或者在這裏添加一個抑制消息我最好的選擇?

+0

你有沒有嘗試初始化列表之前發送到您的視圖? –

回答

3

我相信你需要創建一個自定義ModelBinder來解決這個問題,這是不值得的。在這種情況下,因爲有合理的利益來打破這個規則,所以繼續壓制它。