MVC 5, Razor — как создать шаблон редактирования для одного свойства в модели

У меня есть вопрос, на который, кажется, должно быть легко ответить, но я не уверен, что с ним делать.

У меня есть несколько страниц cshtml, которые используют разные модели. Но каждая из этих моделей имеет общее свойство, называемое WebSiteSK, и один и тот же код Razor и пользовательского интерфейса Kendo, который обрабатывает это свойство в каждом файле cshtml. Что я хочу сделать, так это извлечь эту обычную бритву и пользовательский интерфейс Kendo в 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>

Имеет ли это смысл? Может ли кто-нибудь помочь мне сделать это?


person campbelt    schedule 16.07.2015    source источник


Ответы (1)


Вы можете создать базовый класс, содержащий только свойство «WebSiteSK». Все модели, имеющие это свойство, должны наследоваться от этого базового класса. Затем вы можете создать частичное представление «_WebSiteSK» с кодом, который хотите использовать повторно.

Ваши модели:

public class MyModel : WebSiteSKBaseClass

Частичное представление должно быть типизировано с базовым классом

@model MyProject.Models.WebSiteSKBaseClass

Наконец, вы можете заменить реплицированный код во всех представлениях на:

@Html.Partial("_WebSiteSK")
person Rafael Companhoni    schedule 16.07.2015