Domanda

Sto cercando di creare un modello di editor più "avanzato" per la mia applicazione web MVC, ma ho qualche difficoltà.Prima di spiegare, lasciami mostrare il mio codice sorgente.

Ecco il codice a mio avviso (utilizzando il modello):

@Html.EditorFor(model => model.Height, "UnitTemplate", new { unitModel = Model.HeightUnit, unitType = Units.Distance })

Ecco il modello:

@{
    Layout = null;
}
@using MyProject.Models;

@{
    var unitModel = this.ViewData["unitModel"];
    var unitType = this.ViewData["unitType"] as SelectList;
}

<div class="data-group">
    <div class="editor-label">
        @Html.LabelFor(model => model)
    </div>
    <div class="option1">
        @Html.TextBoxFor(model => model)
    </div>
    <div class="units">@Html.DropDownListFor(model => unitModel, unitType, new { @class = "unit" })</div>
    <div class="validation">
        <div>@Html.ValidationMessageFor(model => model)</div>
    </div>
</div>

Come puoi vedere, ho un valore (in questo caso, Altezza) e ho anche un tipo di unità associato a quel valore (AltezzaUnità).Voglio essere in grado di trasmettere GENERICAMENTE il valore di unità associato al modello (poiché sto usando questo modello in un certo numero di posti) così come il tipo di unità (poiché anche questo può cambiare).In definitiva, l'obiettivo è consentire all'utente di convertire rapidamente tra i valori.

Fortunatamente, tutto funziona fino a questo punto (conversione, popolazione, ecc.), tranne che, quando salvo i risultati, unitModel NON salva nel database.Qualcuno ha suggerimenti su cosa posso fare per farlo funzionare?

È stato utile?

Soluzione

Probabilmente in questo caso vorrai utilizzare un modello di editor per l'intero modello poiché questo modello dipende da più proprietà del modello di visualizzazione principale (Height e HeightUnit):

@Html.EditorForModel("UnitTemplate")

e quindi nel modello dell'editor ~/Views/Shared/EditorTemplates/UnitTemplate.cshtml:

@using MyProject.Models;
@model MyViewModel
@{
    Layout = null;
}
<div class="data-group">
    <div class="editor-label">
        @Html.LabelFor(model => model.Height)
    </div>
    <div class="option1">
        @Html.TextBoxFor(model => model.Height)
    </div>
    <div class="units">
        @Html.DropDownListFor(
            model => model.HeightUnit, 
            Units.Distance, 
            new { @class = "unit" }
        )
    </div>
    <div class="validation">
        <div>
            @Html.ValidationMessageFor(model => model.Height)
        </div>
    </div>
</div>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top