Как использовать Editortemplates в MVC3 для сложных типов?

StackOverflow https://stackoverflow.com/questions/6324102

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть два класса, НДС и продукт. Продукт имеет собственность IVAT. Я пытаюсь использовать шаблоны редактора в MVC для отображения раскрывающегося списка всех объектов НДС при создании/редактировании продукта. Для дорогой жизни меня я не могу работать.

У меня есть следующий код, который отображает выпадающий список, но он не устанавливает НДС для продукта при подаче формы.

Контроллер:

IList<IVatRate> vatRates = SqlDataRepository.VatRates.Data.GetAllResults();
ViewBag.VatRates = new SelectList(vatRates, "Id", "Description");

Add.cshtml

@Html.EditorFor(model => model.VatRate.Id, "VatSelector", (SelectList)ViewBag.VatRates)

Vatselector.cshtml

@model SelectList
@Html.DropDownList(
        String.Empty /* */,
            (SelectList)ViewBag.Suppliers, 
        Model
    )

Я был бы благодарен, если кто -то сможет пролить немного света на это или даже указать мне на хороший пример в Интернете ... Я застрял с этим уже несколько дней.

Это было полезно?

Решение

Я бы использовал крепко напечатанные представления и виды моделей, поскольку это делает вещи намного проще, а не Viewbag.

Так что начните с модели представления:

public class VatRateViewModel
{
    public string SelectedVatRateId { get; set; }
    public IEnumerable<IVatRate> Rates { get; set; }
}

Тогда контроллер:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new VatRateViewModel
        {
            Rates = SqlDataRepository.VatRates.Data.GetAllResults()
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(VatRateViewModel model)
    {
        // model.SelectedVatRateId will contain the selected vat rate id
        ...
    }
}

Вид:

@model VatRateViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedVatRateId,
        new SelectList(Model.Rates, "Id", "Description")
    )
    <input type="submit" value="OK" />
}

И если вы хотите использовать шаблон редактора для vatrateviewmodel, вы можете определить один в ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml:

@model VatRateViewModel
@Html.DropDownListFor(
    x => x.SelectedVatRateId,
    new SelectList(Model.Rates, "Id", "Description")
)

А потом, когда у вас есть свойство типа VatRateViewModel Вы могли бы просто:

@Html.EditorFor(x => x.SomePropertyOfTypeVatRateViewModel)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top