2011-03-07 5 views
1

MVC를 표시하고 ASP.NET에서 뷰 모델에 (하지 편집) 데이터를 바인딩하는 방법 :나는 다음과 같은 일반적인 방법으로 사용자 정의 뷰 모델을 사용하고

public ActionResult Edit(int id) 
    { 
     // Attempt to fetch object from DB 
     var obj = Repository.GetObject(id); 

     // Populate Dto 
     var viewModel = new ObjectViewModel(); 
     var adapter = new ObjectAdapter(obj, viewModel, da); 
     adapter.MapDto(); 

     return View(viewModel); 
    } 

    public ActionResult Edit(int id, ObjectViewModel viewModel) 
    { 
     // Fetch object from DB 
     var obj = Repository.GetObject(id); 

     // Update object from DTO 
     var adapter = new ObjectAdapter(obj, viewModel, da); 
     adapter.MapObject(); 

     // Save back to DB 
     Repository.SaveChanges(); 

     // Return to the Index 
     return RedirectToAction("Index"); 

그럼 ... 내 견해로는 편집을 위해서가 아니라 약간의 데이터를 표시하고 싶습니다. 현재 시도 :

<%: Model.Data %> 

그리고 나는 Html.Label()을 시도했다. 둘 다 데이터를 잘 표시합니다.

하지만 문제는 이것입니다. POST 동작에서 "< % : Model.Data %>"또는 레이블이 ViewModel에 다시 바인딩되지 않습니다. 따라서 "MapObject()"는 POST 액션에서 "Model.Data"에 대해 null을 매핑합니다.

여기 간단한 해결책이있을 것으로 기대하고 있습니까?

도움을 주시면 감사하겠습니다.

건배,

팀.

답변

1

시도 :

Html.HiddenFor(m => m.Data) 

만 양식이 제출 될 때 포함되지 않습니다 <%: Model.Data %>있는 페이지에 값을 기록합니다. 숨겨진 필드는 양식과 함께 제출되지만 분명히 사용자에게는 보이지 않습니다.

+1

그건 멋지게 마쳤습니다 - 고마워요, 친구! – Hanshan

0

당신이 Html.LabelFor (X => x.Data)를 사용하여 시도하는 경우

업데이트 : X에 모델 람다 식을 변경. 숨겨진 필드를 추가

+0

<% = Html.LabelFor (model => model.Data) %> 구문을 사용하면 이상한 것은 뷰가 값 대신 속성 이름 (즉, 데이터)을 렌더링한다는 것입니다. 그러나 이것은 올바른 구문 인 것 같습니다. (http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx) – Hanshan

+0

다음과 같이 해보십시오. <% = Html. LabelFor (x => x.Data) %> –

+0

불행히도 같은 결과입니다. "데이터"는이 경우 단순히 문자열입니다 (FYI). – Hanshan

관련 문제