2012-05-23 5 views
0

에서보기에서 컨트롤러로 데이터를 전달하는 데 데이터가 전달됩니다.이 뷰에 전달 된 첫 번째보기에서 내 viewmodel "TimeLineModel"과 강하게 입력 된보기가 있습니다. 내 viewmodel 이 내 컨트롤러asp.net mvc 3

public ActionResult confirmation(long socialbuzzCompaignId) 
    { 

     return View(new TimeLineModel() { socialBuzzCompaignId = socialbuzzCompaignId, BuzzMessages = model }); 

    } 

에 대한 조치에서 난 내 행동에서 정보를 얻을 수 있으며,보기에 표시,하지만 난 어떤 TRAITEMENT을 할 내보기 모델을받지 않습니다 다른 액션 POST를

[HttpPost] 
    public ActionResult confirmation(TimeLineModel model) 
    { 


    } 

나는 모델의 일부 propretie을 얻을 수 있지만 다른 사람들은 no, 예를 들면 나는 th를 얻을 수있다. 모델의 "socialBuzzCompaignId"속성을 사용하지만 "IEnumerable BuzzMessages"와 같은 다른 속성은 얻을 수 없습니다. 이 내 시야 그냥 어떤 HTML POST 방법과 같은

@model Maya.Web.Models.TimeLineModel 
    @{ 
     ViewBag.Title = "confirmation"; 
    } 
    @using (Html.BeginForm()) 
    { 
    <h2>confirmation</h2> 
     <fieldset>      
      @foreach (var msg in Model.BuzzMessages) 
      {      
      <div class="editor-label"> 
       @msg.LongMessage 
      </div> 
      <br /> 
     } 


    <p> 
     <input type="submit" value="Save" /> 
    </p> 

    </fieldset> 

} 
+1

양식에 BuzzMessages가 제대로 포함되지 않아 TimeLineModel에 제대로 바인딩되지 않습니다. 표시되지 않는 속성에 해당하는 부분을 표시하십시오. – DMulligan

+0

ok Mr AFinkelstein 나는 질문을 편집하고 내보기의 내용을 추가 할 것입니다. – ucef

답변

1

양식 요소 내에 BuzzMessages 속성을 포함시켜야합니다. 편집 할 수 없으므로 아마도 hiddens를 사용하고 싶을 것입니다. 이 작업에는 두 가지 방법이 있습니다. 가장 쉬운 방법은 foreach 루프를 수행하는 대신 for 루프를 수행하고 인덱스로 삽입하는 것입니다.

@for (int i =0; i<Model.BuzzMessages.Count(); i++v) 
{      
    <div class="editor-label"> 
      @Model.BuzzMessages[i].LongMessage 
      @Html.HiddenFor(m => m.BuzzMessages[i].LongMessage); 
    </div> 
     <br /> 
} 

그러나 이렇게하려면 인덱스를 사용하여보기 모델에서 IEnumerable 대신 IList를 사용해야합니다.

또는 이름이 무엇이든간에 BuzzMessages 클래스 이름의 편집기 템플릿을 만들 수 있습니다.

@model BuzzMessagesClass 

@Html.HiddenFor(m => m.LongMessages) 
<!-- Include other properties here if any --> 

은 다음 메인 페이지에

@Html.EditorFor(m => m.BuzzMessages) 

체크 아웃 http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/ 또는 검색 스택 오버 플로우 편집기 템플릿의 세부 사항 당신을 혼란스럽게합니다.

+0

위대한 Mr AFinkelstein, 두 번째 제안으로 작업 할 필요가 없다고 생각합니다. 메시지를 표시하고 편집하지 말고, 도움을 주셔서 감사합니다 !!! – ucef

1

의 내용, 당신은 어떻게 든 다시 컨트롤러에 데이터를 얻을 수 있습니다. 단순히 페이지의 데이터를 "표시"하면 다시 바인딩되지 않습니다.

적절한 모델 속성 이름으로 데이터를 입력 (또는 다시 게시 할 컨트롤)에 넣어야합니다.

이름이 FirstName 인 모델 속성이 있고이 데이터를 POST에서 모델에 리바운드하려는 경우 "숨겨진 입력"(또는 이와 유사한 컨트롤)을 배치하여 모델에 다시 제공해야합니다. 포스트 백) ID가 FirstName 인 경우 POST에서 해당 등록 정보가 모델에 리 바인드됩니다.

희망 사항.

1
@foreach (var msg in Model.BuzzMessages) 
{      
    <div class="editor-label"> 
     @msg.LongMessage 
     <input type="hidden" name="BuzzMessages.LongMessage" value="@msg.LongMessage" /> 
    </div> 
} 

LongMessages의 배열을 게시합니다. 다음과 같은 값을 가져 오십시오.

[HttpPost] 
public ActionResult confirmation(TimeLineModel model, FormCollection collection) 
{ 
    var longMessages = collection["BuzzMessages.LongMessage"]; 
} 
+0

MVC3에서 FormCollection을 사용하고 HTML 헬퍼를 사용하지 않고 입력을 작성하는 것은 모두 나쁜 아이디어라고 생각합니다. – DMulligan

+0

고마워 Karaxuna 씨, 다른 매개 변수가 필요하지 않습니다. – ucef

+0

도움이 되었기 때문에 기쁩니다. – karaxuna