ASP.NET MVC и Entity Framework Html.DisplayNameFor с составной моделью представленияC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ASP.NET MVC и Entity Framework Html.DisplayNameFor с составной моделью представления

Сообщение Anonymous »

Мне довольно комфортно работать с MVVM с использованием WPF/Silverlight, но это моя первая попытка создать веб-приложение ASP.NET MVC... просто для справки.
Я Я создал контроллер под названием TestSitesController, который был автоматически сгенерирован из класса модели «Сайт» в моей модели Entity Framework (шаблон, который генерирует действия и представления чтения/записи). Единственное, что я изменил, это то, что в трех местах для некоторых методов был параметр Guid id = null по умолчанию. Я только что избавился от знака «= null», все работает нормально.
Вот пример того, что я изменил

Код: Выделить всё

public ActionResult Delete(Guid id = null)
{
//....
}
Это было изменено на

Код: Выделить всё

public ActionResult Delete(Guid id)
{
//....
}
Модель сайта не представляет собой ничего особенного: SiteId, Abbreviation и DisplayName… мы стараемся максимально упростить этот вопрос. Хорошо, я запускаю веб-сайт и перехожу к http://.../TestSites/, и все работает отлично.
Я заметил, что все мои представления (Создание, Удаление, Подробности и Редактирование) используете @model MVCWeb.MyEntities.Site, с которым меня сейчас вполне устраивает; но в представлении Index.cshtml я заметил, что он использует

Код: Выделить всё

@model IEnumerable
Это отлично работает для сгенерированного шаблона, но я хотел бы использовать «Модель составного представления», и, возможно, именно здесь я пытаюсь совместить свои знания MVVM, но хотел бы придерживаться это если все возможно. На мой взгляд, модель составного представления — это просто модель, специфичная для представления, состоящего из 1 или нескольких моделей сущностей, а также дополнительных свойств, таких как SelectedSiteId и т. д.
Поэтому я создал очень простая модель представления под названием TestSitesViewModel

Код: Выделить всё

public class TestSitesViewModel
{
// Eventually this will be added to a base ViewModel to get rid
// of the ViewBag dependencies
[Display(Name = "Web Page Title")]
public string WebPageTitle;

public IEnumerable Sites;

// Other entities, IEnumerables, or properties go here
// Not important for this example
}
Затем в моем контроллере я добавил метод действия под названием IndexWithViewModel:

Код: Выделить всё

public ActionResult IndexWithViewModel()
{
var vm = new TestSitesViewModel();
vm.WebPageTitle = "Sites With Composite View Model";
vm.Sites = db.Sites.ToList();

return View(vm);
}
Затем я сделал копию Index.cshtml и назвал ее IndexWithModel.cshtml, чтобы она соответствовала имени моего нового метода. Я изменил верхнюю строку

Код: Выделить всё

@model IEnumerable
в

Код: Выделить всё

@model MVCWeb.Models.TestSitesViewModel
Я добавил это перед разделом таблицы, чтобы проверить DisplayNameFor и DisplayFor

Код: Выделить всё

@Html.DisplayNameFor(model => model.WebPageTitle)
 
@Html.DisplayFor(model => model.WebPageTitle)

Изменено

Код: Выделить всё

@foreach (var item in Model) {
Кому

Код: Выделить всё

@foreach (var item in Model.Sites) {
И закомментировал раздел tr, который на данный момент содержит все заголовки таблиц. Все работает отлично, за исключением того, что @Html.DisplayNameFor отображает имя переменной «WebPageTitle» вместо использования «Заголовка веб-страницы», как указано в атрибуте Display аннотации к данным в

Код: Выделить всё

[Display(Name = "Web Page Title")]
public string WebPageTitle;
А также, если я оставлю комментарий в разделе tr, содержащем информацию заголовка таблицы. Я хоть убей не могу понять, что вставить. Я пробовал model.Sites.Abbreviation, model.Sites[0].Abbreviation и различные другие комбинации, но получаю ошибки.

Код: Выделить всё


@Html.DisplayNameFor(model => model.Abbreviation)


@Html.DisplayNameFor(model => model.DisplayName)



И что же мне там использовать? Я не совсем понимаю, почему model.Sites.Abbreviation не работает, поскольку Sites – это тот же тип, который использовался в качестве модели в исходном файле Index.cshtml

Подробнее здесь: https://stackoverflow.com/questions/159 ... -viewmodel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»