最近,我一直致力于在我的项目中启用更多的 Visual Studio 代码分析规则。但是,我一直碰到规则CA2227:“集合属性应该是只读的”。
假设我有一个这样的模型类:
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);
}
这种方法的问题是我的List<string>
汽车属性违反了规则 CA2227。如果我不进行模型绑定,我可以将属性设为只读并在其他地方填充集合。但是,该方法不适用于默认模型绑定器。现在,当它出现在视图模型中时,我刚刚添加了一条抑制消息。
有没有一种方法可以在不违反 CA2227 的情况下绑定模型中的项目集合?还是在这里添加抑制消息是我的最佳选择?