2013-08-30 2 views
4

В последнее время я работаю над тем, чтобы в моих проектах было включено больше правил анализа кода Visual Studio. Тем не менее, я продолжаю натыкаться на правило CA2227: «Свойства коллекции следует читать только».CA2227 и привязка модели ASP.NET

Скажем, у меня есть класс модели, как это:

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? Или добавляет сообщение о подавлении моего лучшего варианта здесь?

+0

Вы пытались инициализировать список перед отправкой его на ваш просмотр? –

ответ

3

Я считаю, что вам нужно будет создать обычай ModelBinder, чтобы обойти это, чего не стоит. В этом случае, поскольку есть разумная польза для нарушения правила, продолжайте и подавите его.

Смежные вопросы