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?或者在这里添加一个抑制消息我最好的选择?
你有没有尝试初始化列表之前发送到您的视图? –