1

Мой вопрос сегодня в том, как я рассматриваю сложные динамические вложенные частичные представления в приложениях MVC 5. Идея заключается в том, что клиент может добавить x количество магазинов и x количество налогов на магазин за платеж.Проблемы с привязкой моделей с использованием динамического вложенного частичного представления

Лучший способ описать мою ситуацию это со структурой моих моделей:

public class PaymentViewModel 
{ 
    public HomeViewModel 
    { 
     NewStores = new List<StoreViewModel>(); 
    } 
    public IList<StoreViewModel> NewStores { get; set; } 
} 

public class StoreViewModel 
{ 
    public StoreViewModel 
    { 
     NewStoreTax = new List<StoreTaxViewModel>(); 
    } 
    public IList<StoreTaxViewModel> NewStoreTaxes { get; set; } 
} 

public class StoreTaxViewModel 
{ 
    public int TaxId { get; set; }; 
    public string TaxName { get; set; }; 
    public decimal TaxRate { get; set; }; 
} 

Вид Index.cshtml содержит следующую форму: шаблон

@model PaymentViewModel 
@using (Html.BeginForm()) 
{ 
    <div id="newStores"> 
    @for (int i = 0; i < @Model.NewStores.Count(); i++) 
    { 
    @Html.EditorFor(model => @Model.NewStores[i]) 
    } 
    <div /> 

    <input type="button" id="addstore" name="addstore" value="Add Store" /> 
    <input type="submit" id="submit" name="submit" value="Save" /> 
} 

редактор для Store.cshtml :

@model StoreViewModel 
@using (Html.BeginCollectionItem("NewStores")) 
{ 
    <div id="newStoreTax"> 
    @for (int i = 0; i < @Model.NewStoreTaxes.Count; i++) 
    { 
     @Html.EditorFor(model => @Model.NewStoreTaxes[i]) 
    } 
    </div> 

    <input type="button" id="addstoretax" name="addstoretax" value="Add Store Tax" /> 
} 

Наконец шаблон редактор для StoreTax.cshtml:

Всякий раз, когда я отправляю на контроллер и проверяю модель, список объектов Store заполняется, но списки объектов StoreTaxes внутри объекта Store отсутствуют.

У меня есть следующие действия POST в моем контроллере:

[HttpPost] 
public ActionResult Index(PaymentViewModel paymentViewModel) 
{ 

} 

public ActionResult CreateNewStore() 
{ 
    var storeViewModel = new StoreViewModel(); 
    return PartialView("~/Views/Shared/EditorTemplates/StoreViewModel.cshtml", storeViewModel); 
} 

public ActionResult CreateNewStoreTax() 
{ 
    var storeTaxViewModel = new StoreTaxViewModel(); 
    return PartialView("~/Views/Shared/EditorTemplates/StoreTaxViewModel.cshtml", storeTaxViewModel); 
} 

Как я могу структурировать мое приложение, чтобы иметь дело с такими сложными гнездовыми динамическими шаблонами?

Заранее благодарен!

+0

Вам удалось решить эту проблему? В настоящее время я сталкиваюсь с аналогичной проблемой. – prismeyez83

ответ

0

Внутри шаблона редактора вы делаете следующее:

@Html.EditorFor(model => @Model.taxName) 

В то время как вы должны делать:

@Html.EditorFor(model => model.taxName) 

Кроме того, FWIW, вам не нужно перебирать над пункты звонят @Html.EditorFor(model => @Model.NewStores[i]) для каждого. Просто выполните:

@Html.EditorFor(model => model.NewStores) 

Razor автоматически отобразит шаблон редактора для каждого элемента коллекции.

+0

Спасибо Крису! Я добавил ваше предложение и никаких изменений. Списки объектов StoreTaxes внутри объекта Store все еще не заполняются. – Paul