MVC создает несколько объектов из одного представления

Просто чтобы было понятно, мой вопрос заключается в том, как вы СОЗДАЕТЕ несколько объектов, используя одно представление. Моя ViewModel работает нормально, я могу отображать несколько объектов без проблем.

Между кодированием .NET прошло какое-то время (последний раз я кодировал в 2.0). Я создал проект MVC 4 и успешно создал ViewModel (отображение данных в одном представлении из нескольких объектов).

Однако я обманул. Я заполнил базу данных напрямую. Теперь я сталкиваюсь с вопросом наоборот: как лучше всего создавать несколько объектов из одного представления?

В моем примере у меня есть Пользователь, у которого есть userId. userId — это внешний ключ в UserDetails.

Просто пытаетесь вернуться в колею и задаетесь вопросом, чем вы, ребята, занимаетесь?


person user3467816    schedule 27.03.2014    source источник
comment
Вы пометили свой вопрос с помощью ViewModel... я бы так и сделал!   -  person dav_i    schedule 27.03.2014
comment
Ваша модель представления переносит всю соответствующую информацию из вашего представления в ваш контроллер, ваш контроллер заполняет ваши различные DTO из данных в модели представления и взаимодействует с базой данных. Дело сделано. Добавьте дополнительные уровни абстракции между контроллером и БД, если применимо.   -  person Ant P    schedule 28.03.2014


Ответы (2)


Есть 6 способов передать несколько объектов в MVC

  1. ViewModel
  2. Частичный вид
  3. ViewBag
  4. Просмотр данных
  5. TempData
  6. Кортеж

У каждого есть свои плюсы и минусы. Вы должны решить, исходя из вашей проблемы. Для получения дополнительной информации вы можете обратиться к статье проекта кода: Как выбрать лучший способ передачи нескольких моделей в ASP.NET MVC

Позвольте мне указать преимущества и недостатки View Model.

ViewModel: преимущества

  • ViewModel позволяет отображать несколько типов моделей в представлении как одну модель.
  • Отличная поддержка IntelliSense и проверка ошибок во время компиляции на странице просмотра.
  • ViewModel также хорош для целей безопасности, поскольку представления имеют только то, что им нужно. Основные модели предметной области не доступны пользователю.
  • Если есть какие-либо изменения в основной модели домена, вам не нужно ничего менять в коде представления, просто вам нужно изменить соответствующую модель представления.

Недостатки

  • ViewModels добавляют еще один слой между моделями и представлениями, что немного увеличивает сложность. Таким образом, для небольших и демонстрационных приложений мы можем использовать кортежи или другие способы упростить демонстрацию.
person Subhash Rao    schedule 27.03.2014

Вариант 1. Лучше всего использовать строго типизированные представления с моделью или моделью представления.

Например, у вас есть два класса User и Education, вы хотите отобразить все сведения об образовании пользователя в представлении, вы можете создать пользовательскую модель представления и передать ее в представление, где вы просматриваете строго типизированную модель представления:

public class User
{

public int UserId {get;set;}
public string UserName {get;set}
-------
------
}

public class Education
{
public int UserId {get;set;}
public int DegreeId {get;set;}
public long Marks {get;set;}
---------------
--------------
}

Теперь создайте модель представления следующим образом:

public class EducationViewModel
{

public User user {get;set;}
public List<Education> educationList {get;set;}
}

теперь передайте ViewModel в View и сделайте это в View:

@model AppNameSpace.ViewModels.EducationViewModel

Совет. Создайте папку с именем ViewModels и поместите в нее все классы моделей представления.

Вариант 2. Вариант 2 — пользователю ViewBag и передать несколько объектов из элемента управления в ваше представление. ViewBag доступен, когда вы устанавливаете в нем какое-либо значение в контроллер, вы можете получить доступ в представлении этого действия, после чего оно автоматически стирается и становится нулевым, если вы снова обращаетесь к нему.

вы можете использовать ViewBag следующим образом:

ViewBag.Message = "Using ViewBag";

и прочитайте значение, подобное этому в представлении:

string Message = ViewBag.Message as string;

Вариант 3:

Вариант 3 — хранить данные в TempData, когда они доступны только для чтения, это означает, что вы устанавливаете в них значение, а когда вы их читаете, они автоматически удаляются, TempData внутренне использует переменные сеанса. Вы можете использовать TempData следующим образом. :

TempData["Key"] = "value";

теперь вы читаете это в поле зрения:

string val = TempData["Key"] as string;

после прочтения он будет автоматически удален, но вы можете сохранить его, если он вам нужен дальше, вот так:

TempData.Keep("Key");
person Ehsan Sajjad    schedule 27.03.2014
comment
Спасибо, это для отображения данных, а не для создания объекта. - person user3467816; 28.03.2014
comment
что вы имеете в виду на самом деле создание нескольких объектов в поле зрения? - person Ehsan Sajjad; 28.03.2014