Как я могу поделиться шаблон кода, содержащего Html.TextVoxFor между представлениями? - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть классы, подобные следующим.Это много классов с одинаковыми свойствами, такими как CreatedBy и ModifiedBy:

public class Test1 {
    [DisplayName("Created By")]
    public string CreatedBy { get; set; }
    [DisplayName("Modified By")]
    public string ModifiedBy { get; set; }
}
public class Test2 {
    [DisplayName("Created By")]
    public string CreatedBy { get; set; }
    [DisplayName("Modified By")]
    public string ModifiedBy { get; set; }
}

Я хотел бы иметь блок кода, который я повторно использую в различных представлениях для этих классов.Блок кода должен иметь форматирование данных, например:

        <div class="a">
            @Html.LabelFor(model => model.Note.CreatedBy)
            @Html.TextBoxFor(model => model.Note.CreatedBy)
        </div>
        <div class="b">
            @Html.LabelFor(model => model.Note.ModifiedBy)
            @Html.TextBoxFor(model => model.Note.ModifiedBy)
        </div>

. Я рассмотрел несколько различных способов сделать это и первоначально использовал класс для хранения всех измененных и созданных данных.Мое решение было основано на этом:

Другое решение

Однако теперь мне сказали, что я не могу использовать класс, который используется в этом решении, где данные хранятся вкласс RowInfo.Я должен использовать поля напрямую, как в классах Test1 и Test2, которые я показываю выше.

Может кто-нибудь предложить, как я мог бы организовать повторное использование HTML-кода более чем одним классом.Я понимаю, что могу использовать несколько разных способов, но все, что я знаю, похоже, не позволяет мне делиться кодом между несколькими классами, которые используют одни и те же поля.

Надеюсь, это имеет смысл.Если не скажите мне, и я объясню больше.

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Вы можете определить модель базового вида:

public abstract class BaseViewModel
{
    [DisplayName("Created By")]
    public virtual string CreatedBy { get; set; }
    [DisplayName("Modified By")]
    public virtual string ModifiedBy { get; set; }
}

, а затем получить две аналогичные модели представления из этой модели базового представления (поскольку они совместно используют общие функции):

public class Test1 : BaseViewModel 
{
}

public class Test2 : BaseViewModel 
{
}

Затем вы можете определить пользовательский шаблон редактора для модели базового вида (~/Views/Shared/EditorTemplates/BaseViewModel.cshtml):

@model BaseViewModel
<div class="a">
    @Html.LabelFor(model => model.CreatedBy)
    @Html.TextBoxFor(model => model.CreatedBy)
</div>
<div class="b">
    @Html.LabelFor(model => model.ModifiedBy)
    @Html.TextBoxFor(model => model.ModifiedBy)
</div>

В качестве примечания вы также можете использовать интерфейс вместо абстрактного класса для базовой модели:

public interface IBaseViewModel
{
    [DisplayName("Created By")]
    string CreatedBy { get; set; }
    [DisplayName("Modified By")]
    string ModifiedBy { get; set; }
}

и тип редактируемого шаблона напечатан на этом интерфейсе.

Затем для модели основного вида:

public class MyViewModel
{
    public Test1 Test1 { get; set; }
    public Test2 Test2 { get; set; }
}

вы можете вызвать пользовательский шаблон редактора, используяПомощник редактора:

@model MyViewModel
@Html.EditorFor(x => x.Test1)
@Html.EditorFor(x => x.Test2)
0 голосов
/ 19 ноября 2011

Вы пытались поместить код в частичное представление, которое затем можно использовать на любой странице / просмотре?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...