ASP.NET MVC 2 - Как POST сформировать модель из PartialView? - PullRequest
2 голосов
/ 01 марта 2010

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

public class QuestionViewData {
        public Question Question { get; set; }
        public IList<Answer> Answers { get; set; }
}

Теперь в моем представлении вопросов я извлекаю данные из объекта Вопроса - это нормально. Во-вторых, я перебираю все объекты ответа и передаю их в частичное представление:

<% foreach(Answer item in Model.Answers) { %>
        <% Html.RenderPartial("ShowAnswer", item); %>
<% } %>

Для каждого ответа (в частичном представлении) у меня есть несколько кнопок действий (например, рейтинги). Я использую отдельные формы POST со скрытыми полями для каждой кнопки.

Проблема в том, что я не могу опубликовать всю модель QuestionViewData в своем методе действия, потому что у меня только объект ответа в качестве модели в частичном представлении. Однако мне нужно вернуть полное представление вопроса из того действия, которое принимает QuestionViewData в качестве модели.

Как мне справиться с такими ситуациями?

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Как сказал Роберт Харви, вы можете найти его в базе данных, но вы также можете сохранить его в сеансе:

   [HttpGet]
   public ActionResult ShowQuestion(int id)
   {
       var questionModel = new QuestionViewData();
       //populate questionModel
       Session["CurrentlyHandledQuestion"] = questionModel;
       return View(questionModel);
   }

   [HttpPost]
   public ActionResult ManageAnswer(params)
   {
       var questionModel = (QuestionViewData)Session["CurrentlyHandledQuestion"];
   }

Данные сеанса могут быть потеряны во многих ситуациях, поэтому вам следует подумать о ситуации, когда questionModel больше не доступен в действии POST, но в большинстве случаев он будет работать нормально.

1 голос
/ 01 марта 2010

Предполагая, что все ваши ответы содержат идентификатор вопроса, вы можете опубликовать ответы на свой метод контроллера, а затем заполнить оставшуюся часть вашего QuestionViewData типа модели, снова просмотрев вопросы из базы данных. Затем вы возвращаете свой объект QuestionViewData в представление как обычно.

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