.NET编辑器模板中的多模型访问

时间:2011-05-05 15:13:24

标签: asp.net-mvc-3 mvc-editor-templates

我正在尝试为我的MVC Web应用程序创建一个更“高级”的编辑器模板,但我遇到了一些困难。在我解释之前,让我展示一下我的源代码。

以下是我视图中的代码(使用模板):

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

正如你所看到的,我有一些价值(在这种情况下,Height),我也有一个与该值相关联的单位类型(HeightUnit)。我希望能够GENERICALLY传递与模型相关的单位值(因为我在很多地方使用这个模板)以及单位类型(因为这也可以改变)。最终,目标是允许用户在值之间快速转换。

幸运的是,除此之外,一切都可以达到(转换,填充等),但是当我保存结果时,unitModel不会保存到数据库中。有没有人建议我能做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可能希望为整个模型使用编辑器模板,因为此模板依赖于主视图模型的多个属性(HeightHeightUnit):

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