2013-03-30 7 views
0

4 개의 문자열 필드가있는 모델을 선언합니다. 3은 읽기 전용 폼 :MVC 모델이 형식으로 유지되지 않습니다

public class HomeModel 
    { 
     [ReadOnly(true)] 
     [DisplayName("Service Version")] 
     public string ServiceVersion { get; set; } 

     [ReadOnly(true)] 
     [DisplayName("Session Id")] 
     public string SessionId { get; set; } 

     [ReadOnly(true)] 
     [DisplayName("Visiting from")] 
     public string Country { get; set; } 

     [DisplayName("Search")] 
     public string SearchString { get; set; } 

    } 

내가 내 양식에, 그것을 채우기 후, 모델을 통과 :

[HttpGet] 
     public ActionResult Index() 
     { 
      var model = new HomeModel 
          { 
           Country = "Australia", 
           SearchString = "Enter a search", 
           ServiceVersion = "0.1", 
           SessionId = "76237623763726" 
          }; 
      return View(model); 

     } 

그리고 폼이 나는 예상대로 표시됩니다

<h2>Simple Lookup</h2> 

@Html.LabelFor(m=>m.ServiceVersion): @Model.ServiceVersion<br/> 
@Html.LabelFor(m=>m.SessionId): @Model.SessionId<br/> 
@Html.LabelFor(m=>m.Country): @Model.Country<br/> 
<p> 
    @using(Html.BeginForm()) 
    { 
     @Html.LabelFor(m => m.SearchString) 
     @Html.TextBoxFor(m => m.SearchString) 
     <button type="submit" name="btnSearch">Search</button> 
    } 
</p> 

그러나 양식을 제출하고 양식에서 모델을 다시 가져 오면 SearchString의 값만 채워집니다.

[HttpPost] 
public ActionResult Index(HomeModel model) 
{ 
    return View(model); 
} 

는 다른 필드는 '손실'한 바로 그것이인가? MVC는 모델 클래스의 다른 멤버를 보존하지 않습니까? 그리고 이것이 예상된다면 다시 얻을 수있는 방법이 있을까요? 아니면 데이터베이스로 돌아가 모델에 이전 값을 채운 다음 양식 모델의 새 값을 사용해야합니까?

'읽기 전용'필드를 모델에서 다시 읽으려는 타당성이 의심 스러울 수 있습니다. 이는 공정합니다.하지만 게시 된 데이터에 대해 의심스러운 점을 발견 한 경우, 화면을 표시하고 데이터베이스에서 데이터를 다시 읽지 않아도됩니까?

+0

[ReadOnly (true)] 은 속성이 읽기 전용이므로 게시 된 값과 바인딩되지 않습니다. –

답변

0

올바른 동작입니다. 양식 안의 요소 만 작업에 게시됩니다. 양식을 게시 할 때 필드가 양식 안에 있어야 게시물 방법으로 가져올 수 있습니다. 당신이보기에 읽기 전용 그 현장을 촬영 한 경우

업데이트 또한

, 당신은 당신의 행동 방식에 특정 필드를 읽을 수 없습니다. 예 : @Html.LabelFor을 사용하여 표시. 필드를 다시 편집하려면 필드를 편집하지 않으려면 @Html.HiddenFor을 사용하십시오.

+0

다른 필드를 양식 내로 이동했지만 같은 문제가 발생합니다. 어쩌면 모델에서 읽기 전용이되어서는 안됩니까? – Craig

+0

예. 게시물 메서드에서 읽기 전용 필드를 다시 가져올 수 없습니다. –

+0

좋습니다, 감사합니다. 그래서 필드를 레이블로보고 모델로 다시 가져와야하는 경우 HiddenFor (게시 용)와 DisplayFor (디스플레이 용)를 모두 사용해야합니다. – Craig

관련 문제