2010-03-12 10 views
2

예를 들어 CreateEdit ViewUserControl이있는 경우와 같이 모델이없는 경우 TextBoxFor 헬퍼가 비어있는 것으로 나타났습니다. 편집보기 필드가 채워지면 작성 필드가 비어 있지만 여전히 렌더링됩니다.ASP.NET MVC TextBoxFor null 도우미 빈 도우미

문제는 TextBoxFor는 이름에 다른 ID를 허용하지 않습니다 (LabelFor 및 다른 것과 동일하지만 LabelFor에는 사용자 정의 HTML 도우미가 있음).

그래서 어떤 경우에는 정규 Html.TextBox 도우미를 사용해야합니다. 문제는 내가 이것을 쓰면입니다.

<%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 

Create View (분명히)에서 오류가 발생합니다.

그래서 나는이 작업을 수행해야한다 :

<% if (Model != null) %> 
    <%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 
    <% else %> 
    <%=Html.TextBox("postname", null, new { @class = "postsDropDown" })%> 

을 이제 내가 더 이상 좋아하지 않아 뭔가합니다 (IF의)입니다.

유일한 방법입니까? TextBoxFor 도우미를 확장 할 수 있지만 너무 많은 문제가있는 것 같습니다. 결국 우리는 "For"헬퍼를 모두 확장 할 것이지만, ASP.NET MVC 팀 (built-in)이이를 수행해야한다고 생각합니다.

+0

도우미가 문제를 해결할 수있는 방법을 이해할 수 있도록 도와주세요. 현재 사례에서와 같이 Model.PostCode를 평가하는 동안 모델이 null 인 경우에도 문제가 있습니다. 도우미 작성 후 Model.PostCode를 여전히 사용하고 있다면 호출 도우미가 만들어지기 전에도 평가 오류가 발생합니다. –

+0

내 생각에 이것은 당신의 설계 문제입니다. 모델에 대한 이유가 없어야합니다. null 인 경우 –

+1

@matt : Create 뷰에있을 때 엔티티의 새 인스턴스를 생성하기 때문에 모델이 분명히 null입니다.이 모델이 어떻게 다를 수 있는지는 알 수 없습니다. 모델에 빈 객체를 제공하면됩니다. 디자인 문제입니다. – mare

답변

0

Modelnull 인 경우 Model.PostCode.postname에 액세스하려고하면 NullReferenceException이 발생하므로 TextBoxFor에서 수정할 수 있다고 생각하지 않습니다. Model != null && Model.PostCode != null ? Model.PostCode.postname : null과 같은 일을 시도 할 수도 있지만 상당히 불쾌합니다 .-(