2013-07-02 5 views
3

Я пишу представление, которое отображает список менеджеров. У менеджеров есть флажки рядом с их именем, чтобы выбрать их для удаления из списка менеджеров. У меня возникают проблемы с привязкой представления формы к моей модели представления. Вот то, что страница выглядит следующим образом:Невозможно связать модель MVC на POST

enter image description here

Вот ViewModel для этой страницы.

public class AddListManagersViewModel 
{ 
    public List<DeleteableManagerViewModel> CurrentManagers; 
} 

А вот суб-ViewModel для каждого из DeleteableManagers:

public class DeleteableManagerViewModel 
{ 
    public string ExtId { get; set; } 
    public string DisplayName { get; set; } 

    public bool ToBeDeleted { get; set; } 
} 

Это код для главного вида:

@model MyApp.UI.ViewModels.Admin.AddListManagersViewModel 
<div class="row"> 
    <div class="span7"> 
     @using (Html.BeginForm("RemoveManagers","Admin")) 
     { 
      @Html.AntiForgeryToken() 
      <fieldset> 
       <legend>System Managers</legend> 

       <table class="table"> 
        <thead> 
         <tr> 
          <th>Name</th> 
          <th>Remove</th> 
         </tr> 
        </thead> 

        <tbody> 
         @Html.EditorFor(model => model.CurrentManagers) 
        </tbody> 
       </table> 
      </fieldset> 
      <div class="form-actions"> 
       <button type="submit" class="btn btn-primary">Delete Selected</button> 
      </div> 
     } 
    </div> 
</div> 

И это EditorTemplate Я созданный для DeleteableManagerViewModel:

@model MyApp.UI.ViewModels.Admin.DeleteableManagerViewModel 

<tr> 
    <td>@Html.DisplayFor(model => model.DisplayName)</td> 
    <td> 
     @Html.CheckBoxFor(model => model.ToBeDeleted) 
     @Html.HiddenFor(model => model.ExtId) 
    </td> 
</tr> 

Но когда я отправляю форму контроллеру, модель возвращается обратно! это то, что я хочу, чтобы это сделать:

[HttpPost] 
public virtual RedirectToRouteResult RemoveManagers(AddListManagersViewModel model) 
{ 
    foreach (var man in model.CurrentManagers) 
    { 
     if (man.ToBeDeleted) 
     { 
      db.Delete(man.ExtId); 
     }   
    } 
    return RedirectToAction("AddListManagers"); 
} 

Я попытался следующие по этому сообщению: CheckBoxList multiple selections: difficulty in model bind back, но я должен быть что-то ....

Спасибо за вашу помощь не хватает!

+1

ли Firebug что-нибудь показать их размещения? Вы пытались добавить Glimpse (что позволит вам отслеживать процесс привязки)? –

+0

это, кажется, отвечал правильно: __RequestVerificationToken = H7L_Uq6ie_6XAoYFhJQhQe2cuFdJzapaf8ZlgpnEVeUs3kr8kCu7wuVAjZ9ADXzsDZiKmHyqYLkdbVtG7CmSKPqE_upz1eR0Ub0aPxem94Y1 & CurrentManagers% 5B0% 5D.ToBeDeleted = верно и CurrentManagers% 5B0% 5D.ToBeDeleted = ложь и CurrentManagers% 5B0% 5D.ExtId = X00405982144 & CurrentManagers% 5B1% 5D.ToBeDeleted = ложь [надрез ...] – solidau

+0

Хм. Единственная другая очевидная (возможная) проблема, которую я вижу, - это то, что при привязке модели, если индексирование коллекции нарушено (пропускает число), все после последнего последовательного номера игнорируется/отбрасывается. Я не вижу, чтобы у вас была эта проблема. –

ответ

1

Хм. Я думаю, что это, в конечном счете, проблема; вот что вы позируют:

CurrentManagers[0].ToB‌​eDeleted=true&CurrentManagers[0].ToBeDeleted=false&CurrentManagers[0].Ext‌​Id=X00405982144 

Ваша модель является AddListManagersViewModel, которая имеет коллекцию CurrentManagers. Итак, вы отправляете массив из DeleteableManagerViewModel, который не привязывается к модели «обертка». Вы можете попытаться изменить параметр модели для

params DeleteableManagerViewModel[] model

Я никогда не использовать EditorFor расширения, хотя, так что я просто предполагаю, ...

+0

Вы на что-то с этим не привязываете модель обертки. Когда я меняю его, чтобы не включать обертывание, он работает и привязывается должным образом.Но проблема в том, что (я думаю) мне нужна оболочка, потому что на самом деле страница отображает две формы (другую для добавления к менеджерам, которая работает и связывается даже с оберткой ...) – solidau

Смежные вопросы