Question

J'ai deux classes, Vat et produit. Le produit a une propriété de Ivat. Je suis en train de modèles d'éditeur d'utilisation dans MVC pour afficher une liste déroulante de tous les objets Vat lors de la création / édition d'un produit. Pour la vie chère de moi, je ne peux pas obtenir ce travail.

Je le code suivant qui affiche le menu déroulant, mais il ne définit pas le Vat pour le produit lorsque le formulaire est soumis.

Contrôleur:

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
    )

Je serais reconnaissant si quelqu'un peut faire la lumière sur ce ou me diriger même un bon exemple sur le web ... quelque part je suis coincé avec ce depuis quelques jours maintenant.

Était-ce utile?

La solution

J'utiliser des vues et des modèles de vue fortement typé comme cela rend les choses beaucoup plus facile plutôt que ViewBag.

Donc, commencer par un modèle de vue:

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

puis un contrôleur:

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
        ...
    }
}

Voir:

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

Et si vous vouliez utiliser le modèle de l'éditeur pour le VatRateViewModel vous pouvez définir un en ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml:

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

et puis à chaque fois que quelque part, vous avez une propriété de type VatRateViewModel vous pouvez simplement:

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

qui rendrait le modèle de l'éditeur correspondant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top