2013-08-30 68 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来解决这个问题,这是不值得的。在这种情况下,因为有合理的利益来打破这个规则,所以继续压制它。