Domanda

Ho due classi, Iva e del prodotto. Il prodotto ha una proprietà di IVAT. Sto cercando di modelli di utilizzo dell'editor in MVC per visualizzare un elenco a discesa di tutti gli oggetti del Vat durante la creazione / modifica di un prodotto. Per il caro vita di me non riesco a ottenere questo lavoro.

Ho il seguente codice che visualizza la discesa ma non imposta l'Iva per il prodotto quando il modulo viene inviato.

Controller:

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
    )

Le sarei grato se qualcuno può far luce su questo o anche punto me un buon esempio da qualche parte sul web ... Sono stato bloccato con questo per un bel paio di giorni.

È stato utile?

Soluzione

Vorrei usare una vista fortemente tipizzati e visualizzare i modelli in quanto rende le cose molto più facile, piuttosto che ViewBag.

Quindi, iniziare con un modello di vista:

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

quindi un controllore:

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

Visualizza:

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

E se si voleva utilizzare editor di modelli per la VatRateViewModel si potrebbe definire uno in ~/Views/Shared/EditorTemplates/VatRateViewModel.cshtml:

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

e poi ogni volta che da qualche parte si dispone di una proprietà di tipo VatRateViewModel si potrebbe semplicemente:

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

che renderebbe Editor modello corrispondente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top