Многократный модельный доступ в шаблонах редактора .NET - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь создать более «продвинутый» шаблон редактора для моего веб-приложения MVC, но у меня возникли небольшие трудности. Прежде чем я объясню, позвольте мне показать мой исходный код.

Вот код на мой взгляд (с использованием шаблона):

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

Вот шаблон:

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

Как видите, у меня есть какое-то значение (в данном случае, Высота), и у меня также есть тип единицы измерения, связанный с этим значением (HeightUnit). Я хочу иметь возможность ОБЯЗАТЕЛЬНО передавать значение единицы измерения, связанное с моделью (поскольку я использую этот шаблон во многих местах), а также тип единицы измерения (поскольку это также может измениться). В конечном итоге цель состоит в том, чтобы позволить пользователю быстро преобразовывать значения.

К счастью, до этого момента все работает (конверсия, заполнение и т. Д.), За исключением того, что, когда я сохраняю результаты, unitModel НЕ сохраняет в базу данных. У кого-нибудь есть предложения о том, что я могу сделать, чтобы заставить это работать?

1 Ответ

1 голос
/ 05 мая 2011

В этом случае вы, вероятно, захотите использовать шаблон редактора для всей модели, поскольку этот шаблон зависит от нескольких свойств модели основного вида (Height и HeightUnit):

@Html.EditorForModel("UnitTemplate")

затем в шаблоне редактора ~/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>
...