2017-02-09 9 views
0

У меня есть один контроллер с 2 действиями.Правильный способ построения приложения MVC

Первое действие с использованием Entity Framework для получения списка запросов из базы данных, а затем представление отображает их.

public class HomeController : Controller 
{ 
    public ActionResult HelpRequests() 
    { 
     using (var context = new MyDbContext()) 
     { 
      var items = context.Requests.ToList(); 
      return View(items); 
     } 
    } 
} 

Зрение:

@model List<Request> 
@foreach (var request in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(model => request.Id) 
     </td> 
     <td> 
      @Html.DisplayFor(model => request.Title) 
     </td> 
     <td> 
      @Html.DisplayFor(model => request.Message) 
     </td> 
     <td> 
      @Html.DisplayFor(mode => request.CreateDate) 
     </td> 
     <td>@Html.ActionLink("Reply", "SendResponse", new { id = request.Id })</td> 
    </tr> 
} 

И, наконец, модель для запроса является

public partial class Request 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Message { get; set; } 
    public System.DateTime CreateDate { get; set; } 
    public Nullable<bool> Responded { get; set; } 
} 

Если посмотреть на выходе вида кода I ссылки, которая будет принимать пользователь Главная/SendResponse/id

Здесь моя неопределенность входит.

Целью действия SendResponse является ответ на конкретный запрос. В представлении SendResponse я хотел бы показать некоторые поля модели запроса, чтобы автор знал, что включить в ответ.

Мои конкретные вопросы

  1. Потому что я хочу, чтобы отобразить некоторые данные из модели запроса, модель для представления будет установлен в модели запроса, но цель представления будет посылать ответ (который определен в модели ответа). Так что я должен просто установить некоторые свойства ViewBag. *, Которые установлены в полях в классе запроса, и использовать их вместо модели запроса, а затем настроить мою модель представления на ответ?

  2. Как хорошо/лучше всего иметь один контроллер для работы с двумя моделями (в этом случае запросы и ответы)?

Короче говоря, я просто не 100% уверен в том, как структурировать комбинацию MVC, которая принимает данные от одной модели, а затем создает новую модель, основанную на этих данных.

+1

В действии контроллера SendResponse вы можете получить данные Запроса для предоставленного id из db. Вы можете создать еще один класс модели, который может обернуть данные запроса из db и любые дополнительные данные, которые вы хотите отобразить в представлении SendResponse. –

+1

Всегда можно создать индивидуальный класс модели на основе данных, которые вы хотите отобразить на экране. –

+1

Лучше установить другую модель представления, которая обертывает обе модели, из-за представлений допускает только механизм привязки одной модели. Созданная модель просмотра может быть настроена так, чтобы содержать определенную часть данных, которые вы хотите передать. –

ответ

0

Типичным примером является создание модели для каждого вида. В вашем коде вы напрямую отправляете объект Request из своей базы данных. Обычно можно создать RequestViewModel и отправить это на просмотр, чтобы работать против.

Когда автор нажимает на вашу ссылку, вы получите идентификатор запроса. Вы используете идентификатор для извлечения соответствующего объекта запроса из своей БД, а затем проецируете его в ResponseEditModel. Вы включаете/объявляете некоторые поля в этой модели, которые хотите включить из объекта запроса. Вы в основном копируете их.

Контроллер может работать со многими моделями, в большинстве случаев я бы рекомендовал делать модель для каждого вида. Самое главное - держать контроллер связным каким-то образом, как обработка запроса и обработка ответов, звучит нормально.

+0

Ah okay, поэтому моя модель запроса - это класс, который представляет данные в базе данных, и вы говорите, чтобы затем маршалировать данные от запроса к модели запроса, для представления и модели responseview для представления ответа отправки. Мне нравится этот подход – andrewb