2011-02-11 1 views
0

asp.net MVC 2 프로젝트에 있고 System.Web.Mvc.ViewPage < 동적 >에서 상속되는보기가 있습니다. 나는 다음과 같은 것을 할 싶습니다 :ASP.net MVC 2에서 익명 또는 동적 뷰 모델을 뷰에 전달할 수 있습니까?

내보기 위해
public ActionResult Index() 
{ 
    dynamic model = new {Value1= string.Empty, Value2= string.Empty}; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(dynamic model) 
{ 
    var value1 = model.Value1; 
    var value2 = model.Value2; 
    // do something here. 
} 

, 나는 현재 아래 있습니다

<% using(Html.BeginForm("Index", "Test")) 
    { 
%> 
    <div> 
     <label for="Value1">Value1:</label> 
     <%=Html.TextBox("Value1", Model.Value1 as string) %> 

    </div> 
    <div> 
     <label for="Value2">Value2:</label> 
     <%=Html.Password("Value2", Model.Value2 as string) %> 
    </div> 
    <div> 
     <input type="submit" value="Submit" /> 
    </div> 
<% } %> 

위의 코드는 '의 정의를 포함하지 않는 객체 "의 오차를 산출 Value1 '' "및 Value1 Html.TextBox 줄을 강조 표시합니다.

필자는 자신의 HTML 양식과 입력 태그 (이름과 ID 특성을 모두 포함해야 함)를 작성하고 값을 Model.Value1 및 Model.Value2로 설정하려고 시도했습니다. 이렇게하면 페이지 (및 테스트 값)가 렌더링됩니다. 그러나, 제출시 이전과 같은 오류가 발생합니다.

ASP.Net MVC2의 내 ViewModels에 익명 및/또는 동적 유형을 사용할 수 있습니까? 아니면 내가 피하려고하는 수많은 DTO를 작성해야합니다.

+0

응용 프로그램/뷰/데이터 모델 엔티티 클래스를 사용하면 자동 유효성 검사가 더 나은 것으로 나타납니다. 익명의 수업은 어쨌든 그 기쁨을주지 않습니다. –

+0

로버트에 동의합니다. ASP.NET MVC에 대해 들었던 모든 내용은 강력한 형식의 뷰 (화요일 MVC Conf에서 들었던 것을 포함하여)를 제안합니다. – Mayo

+0

강력하게 형식화 된보기 모델의 이점을 이해하고 그 방식을 이해하지 못합니다. 이것은 현재 작동하는지 확인하기 위해이 시점에서 개념 증명입니다. – JamesEggers

답변

2

은 동적 모델을 필요로보기를 선언하는 경우 예, 그것은 가능합니다 : 당신이 MVC 2의 기본 템플릿 (Html.EditorForModel())를 사용하는 경우 당신도 그렇게 할 필요가 없습니다 말했다

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

.

+0

사실 나는 그것을 가지고 있지만 일반적인 속성을 꺼 냈습니다. 지금 고치는 작업. 그래도 여전히 작동하지 않습니다. – JamesEggers

+0

동적 인 객체를 지원하는지 잘 모르겠으므로,'Html.TextBox'없이 시도해도 되겠지만 그렇게해야합니다. 내가 말했듯이, 여기에서는'EditorForModel()'을 사용합니다. 정적 형식 검사없이 컨트롤러와 뷰를 동기화 할 필요가 없기 때문입니다. –

+0

EditorForModel()처럼 보이지 않으며 HTML 도우미는 실제로 동적 및 익명 유형을 지원하지 않습니다. MVC2를 사용할 때 DTO가 붙어있는 것처럼 보입니다. 감사합니다. – JamesEggers

0

.NET 4.0 익명 형식은 쉽게 ExpandoObjects로 변환 될 수 있으므로 모든 문제는 변환 자체의 오버 헤드로 수정됩니다. 체크 아웃 here

관련 문제