2011-03-30 5 views
0

아래의 MODELVIEW 패턴에 대한 POST 값을 얻는 방법을 아는 사람이 있습니까? Checkboxes 및 Radio 버튼 인 MenuItem을 으로 표시 할 수 있지만 사용자가 POST 양식을 제출하면 ModelViewTest가 null입니다. 나는 사용자가 선택한 MenuItems의 List를 기대하고있다.ASP MVC에서 ViewModel 목록을 바인딩하는 방법은 무엇입니까?

public class ModelViewTest 
{ 
    public IEnumerable<MenuItem> MenuItemList { get; set; } //Will be displayed as listboxes and checkboxes 
    public Restaurant restaurant {get;set;} 
} 

작업 :

public ActionResult Edit() 
{ 
    //some code here 
    } 
    return View(new ModelViewTest()); 
} 

[HttpPost] 
public ActionResult Edit(ModelViewTest model) 
{ 
    //I'm not getting List of MenuItems 

    return View(); 
} 

의 MenuItem 클래스 :

public class MenuItem 
{ 
    public string MenuItemCode{get;set;} 
    public string MenuItemDescription{get;set;} 
    public string UIType {get;set;} //This determines whether it's radio or checkbox 
    public string UIGroupType {get;set;} //Determines the Group for radio/checkbox. 
} 

public class Restaurant 
{ 
    public string restaurantName{get;set;} 
    public MenuItem MenuItem{get;set;} 
} 

업데이트

참조하십시오 아래에있는 내보기 코드 :

,
<table>         
    @foreach (var menu in Model.MenuList) 
    { 
     if (menu.UIType == "Radio") 
     { 
      <tr> 
       <td align="left"> 
        <input id="MenuCheckboxRadio" name="@Menus.UIGroup" value="@Menu.MenuItemCode" type="radio" /> 
        <label>@Menu.MenuItemDescription</label> 
       </td> 
      </tr>    
     } 
     else 
     { 
      <tr> 
       <td align="left"> 
        <input id="MenuCheckbox" name="@Menus.UIGroup" value="@Menus.[email protected]" type="checkbox" /> 
        <label>@Menu.MenuItemDescription</label> 
       </td> 
      </tr> 
     } 
     i++; 
    } 
</table> 
+3

보기 코드는 무엇입니까? 모델을 포함하면 게시 작업의 반환 된보기에는 제출 된 데이터 만 표시됩니다 (즉,보기 (모델) 반환). – isNaN1247

+0

plz 또한 MenuItem 및 Resturant 클래스의 코드를 게시합니다. –

+0

안녕하세요, 무하마드. MenuItem 및 레스토랑 클래스를 추가했습니다. 이 수업을 다 끝내고 있다는 것을 명심하십시오. 실제 수업은 훨씬 더 복잡합니다. 나는 먼저 기본 정렬을 얻으려고 노력하고있다. –

답변

2

POST 액션에서 메뉴 항목의 목록을 얻으려면 HTML <form>에 해당 값이 포함되어 있어야하며 이는 모음이므로 standard naming convention에 따라 기본 모델 바인더에서 파싱 할 수 있습니다.

+0

링크를 살펴 봤지만 POST에서 라디오 및 체크 박스의 동적 그룹이 어떻게 캡처 될지 알지 못합니다. MenuItem과 Restaurant에 대한 클래스를 원래 질문 인 –

1

먼저 ViewModel 렌더링 방법을 알려야합니다.

다음보기에 Foreach 루프에 대한 NOT하게 당신의 MenyItem

<%@ Control Inherits="ViewUserControl<MenyItem>" %> 

<%: Html.TextBoxFor(m => m.MenuItemCode) %> 
<%: Html.TextBoxFor(m => m.MenuItemDescription) %> 
....... 

에 대한 편집기 템플릿 할 부분도합니다 : 그러나이 시도

<%@ Page Inherits="ViewPage<ModelViewTest>" %> 

    <% using (Html.BeginForm()) {%> 

    <% for (int i = 0; i < 3; i++) { %> 

     <%: Html.EditorFor(m => m.MenuItemList[i]) %> 

    <% } %> 
<% } %> 

을 그리고이 answer

를 참조하십시오
+0

에 추가했습니다. 내 시나리오에서 작동하지 않을 것입니다. 각 체크 박스 나 라디오 버튼에 i를 추가하면 그룹이 작동하지 않습니다. "UIGroupType"을 기반으로 각 확인란과 라디오 단추를 그룹화해야합니다. 예 : GroupType은 디저트 또는 점심 또는 저녁 식사 일 수 있습니다. –

0

아래에서 내 View code snippet을 참조하십시오.

<table> 
    @foreach (var menu in Model.MenuList) 
    { 
     if (menu.UIType == "Radio") 
     { 
     <tr> 
      <td align="left"> 
       <input id="MenuCheckboxRadio" name="@Menus.UIGroup" value="@Menu.MenuItemCode" type="radio" /> 
       <label>@Menu.MenuItemDescription</label> 

      </td> 
     </tr>    
     } 
     else 
     { 
     <tr> 
      <td align="left"> 
       <input id="MenuCheckbox" name="@Menus.UIGroup" value="@[email protected]" type="checkbox" /> 
       <label>@Menu.MenuItemDescription</label> 


      </td> 
     </tr> 

     } 
     i++; 
    } 
</table> 
관련 문제