Collections.Generic.Dictionaryпривязка модели от Viewmodel к контроллеру - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть эта проблема: когда я пытаюсь опубликовать отправку из View в httppost actionResult, я всегда получаю нулевое значение.

это мой код:

    public class WhiteListViewModel
{
    public string Badge { get; set; }
    public IEnumerable<string> Selezioni { get; set; }
    public IEnumerable<bool> Abilitazioni { get; set; }
}


public ActionResult WhiteList()
{ 

    return View( "Whitelist", MasterPage, new WhitelistViewModel()); 
}

[HttpPost]
public ActionResult WhiteListp(IEnumerable<WhiteListViewModel> Whitelist )
{
            bool[] abilitato = new bool[Whitelist.Single().Abilitazioni.Count()];
            string[] selezione = new string[Whitelist.Single().Selezioni.Count()];            
 ...
}



    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/SiteR.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<_21112010.ViewModel.WhiteListViewModel>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    WhiteList
</asp:Content
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>WhiteList</h2>         
   <table style="width:100%;">  
   <thead>      
 </thead>  
    <tbody >               
        <%using ( Html.BeginForm( ) )
   {%>  
            <%  foreach ( var item in Model ){%>
                    <tr style="width:100%;">
                <td >
                <%: item.Badge%>                
                </td>                
                <%foreach ( var abit in item.Abilitazioni ){%>
                 <td >                    
                    <%: Html.CheckBoxFor(c=>abit/*, new { onchange = "this.form.submit();" } */ )%>
                    <%: Html.ValidationMessageFor(c => abit) %>
                </td>                       
                <%  } %>
                <%} %> 
                <td style=" width:1px;" >
                <%: Html.HiddenFor(model=>item.Badge) %>
                <% foreach (var sel in item.Selezioni) {%>
                <%: Html.HiddenFor(c=>sel) %>
                <%} %>
                </td>
                </tr>                                   <%}%>                               
        </tbody> 
        <tfoot>
        </tfoot >
        </table>
     <input type="submit"  value="Salva ed Esci" style = "background-color:Gray; color:#F6855E; font-weight:bold;  border:1px solid black; height:20px;"  /> 
       <%:Html.ActionLink( "Aggiungi Badge", "AggiungiBadge")%>               
        <% } %>                     
        </div>
</asp:Content>

где я не так делаю?

1 Ответ

0 голосов
/ 14 апреля 2011

Процесс привязки попытается сопоставить IEnumerable с параметром Белый список действия HttpPost. Тем не менее, я вполне уверен, что это не удается, потому что процесс привязки не имеет информации, чтобы связать отправленные поля с ожидаемым параметром «Белый список».

У вас есть несколько вариантов:

  1. Попробуйте использовать TryUpdateModel () в своем действии;

  2. Создание пользовательского ModelBinder. Это позволит вам объединить представленную модель и построить свой IEnumerable до того, как он будет передан параметру действия;

  3. Вы можете объединить отправленные поля, используя объект FormCollection из действия. Это немного грязно и не идеально;

  4. Упростите ваш взгляд.

Лично я бы посмотрел на ModelBinder. Во всяком случае, это поможет вам лучше понять, почему Модель может не связываться с параметром действия.

...