MVC 5,Razor - 如何为模型中的一个 属性 创建编辑模板

MVC 5, Razor - How to create Edit Template for one property in model

我有一个问题,感觉应该很容易回答,但我不确定从哪里开始。

我有几个采用不同模型的 cshtml 页面。但是,这些模型中的每一个都有一个共同的 属性,称为 WebSiteSK,以及相同的剃刀和 Kendo UI 代码来处理每个 cshtml 文件中的 属性。我想要做的是将这个普通剃须刀和 Kendo UI 提取到 EditerTemplate 中。

因此,我有一个采用模型的 cshtml 页面,我将其称为 ModelA。然后,另一个采用另一个模型,称为 ModelB。 ModelA 和 ModelB 都有一个名为 WebSiteSK 的整数 属性,我想提取到编辑器模板中的代码接收到它。

这是我想集中在编辑器模板中的代码:

<script type="text/x-kendo-tmpl" id="site-droplist-template">
    <span>#: data.WebSiteSK # - </span>
    <span><b>#: data.SiteName # </b> - </span>
    <span>#: data.EnvironmentNK #</span>
    <br />
    <span>#: data.SiteUrl #</span>
</script>

<div>
    @Html.LabelFor(model => model.WebSiteSK, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @(Html.Kendo().DropDownList()
                .Name("WebSiteSK_Target")
                .DataTextField("SiteName")
                .DataValueField("WebSiteSK")
                .DataSource(d => d.Read("GetWebSiteList", "Site"))
                .Height(300)
                .TemplateId("site-droplist-template")
                .Filter("contains")
                .OptionLabel("Select a site")
                .Events(d =>
                    {
                        d.DataBound("onSiteBound");
                        d.Change("onSiteChange");
                    })
                )
        @Html.ValidationMessageFor(model => model.WebSiteSK, string.Empty, new { @class = "text-danger" })
    </div>
</div>

这有意义吗?谁能帮我做这个?

您可以创建一个仅包含 属性 'WebSiteSK' 的基础 class。所有具有这个 属性 的模型都应该从这个基础 class 继承。然后,您可以使用要重用的代码创建局部视图“_WebSiteSK”。

您的模特:

public class MyModel : WebSiteSKBaseClass

局部视图必须用base打字class

@model MyProject.Models.WebSiteSKBaseClass

最后,您可以将所有视图中的复制代码替换为:

@Html.Partial("_WebSiteSK")