Pergunta

Estou tentando criar um modelo de editor mais "avançado" para meu aplicativo MVC da web, mas estou tendo um pouco de dificuldade.Antes de explicar, vou mostrar meu código-fonte.

Aqui está o código em minha visão (usando o modelo):

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

Aqui está o modelo:

@{
    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>

Como você pode ver, tenho algum valor (neste caso, Height) e também tenho um tipo de unidade associado a esse valor (HeightUnit).Quero ser capaz de passar GENERICAMENTE o valor da unidade associada ao modelo (já que estou usando este modelo em vários lugares), bem como o tipo de unidade (já que isso também pode mudar).Em última análise, o objetivo é permitir que o usuário converta rapidamente entre os valores.

Felizmente, tudo funciona até este ponto (conversão, população, etc), exceto que, quando eu salvo os resultados, o unitModel NÃO salva no banco de dados.Alguém tem sugestões sobre o que posso fazer para que isso funcione?

Foi útil?

Solução

Você provavelmente deseja usar um modelo de editor para todo o modelo neste caso, pois esse modelo depende de várias propriedades do modelo de visualização principal (Height e HeightUnit):

@Html.EditorForModel("UnitTemplate")

e, em seguida, no modelo do 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top