2013-08-30 5 views
4

최근에 저는 프로젝트에서 Visual Studio 코드 분석 규칙을 더 많이 사용하도록 노력하고 있습니다. 그러나, 나는 규칙 CA2227에 부딪 치고있다 : "수집 속성은 읽기 전용이어야한다".CA2227 및 ASP.NET 모델 바인딩

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

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

내가 강력하게 매핑보기 페이지가 :

내가이 같은 모델 클래스가 말

ASP.NET MVC와
@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> 
} 

, 나는에서 작업을 쓸 수를 내

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

또한, p : 자동 형 Foo 부류이 입력을 바인딩 제어기 이 접근 방식의 문제점은 내 List<string> 자동 속성이 CA2227 규칙을 위반한다는 것입니다. 모델 바인딩을 수행하지 않았다면 속성을 읽기 전용으로 만들고 컬렉션을 다른 위치에 채울 수있었습니다. 그러나이 방법은 기본 모델 바인더에서는 작동하지 않습니다. 지금은보기 모델에서 발생했을 때 억제 메시지를 추가했습니다.

CA2227을 위반하지 않고 모델에서 컬렉션을 바인딩 할 수있는 방법이 있습니까? 아니면 여기서 억제 메시지를 추가 하시겠습니까?

+0

보기로 보내기 전에 목록 을 초기화 해 보셨습니까? –

답변

3

이 문제를 해결하려면 맞춤 ModelBinder을 만들어야한다고 생각합니다. 그만한 가치는 없습니다. 이 경우에는 규칙을 어기는 것이 합리적으로 효과적이므로이를 억제하십시오.