ASP.NET MVC 2: как вы используете Html.EditorFor для пользовательских моделей? - PullRequest
0 голосов
/ 24 января 2011

Мне интересно, как это будет работать в MVC 2.

Предположим, я хочу отобразить представление (Popup.ascx) со списком вопросов. Я создал эти ViewModels

  public class VMPopup
  {
    public List<VMQuestion> Questions;
  }
  public class VMQuestion
  {
    public int Id
    public string Question;
    public string Answer;
    public bool Mandatory;
  }

У меня был бы такой метод в контроллере

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Popup(int elementId)
{
  List<VMQuestion> questions = new List<VMQuestion>();

  // Code to generate the questions
  // .....

  VMPopup vm = new VMPopup{Questions = questions};
  return View(vm);
}

1 - Что бы я добавил в представление Popup.ascx?Нужен ли здесь BeginForm?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EnterpriseConnectMVC.Controllers.VMPopup>" %>

    <table border="1">
      <% foreach(var q in Model.Questions) { %>
        <%= Html.EditorFor(q); // I know this is wrong, how should I do it? %> 
      <% } %>
    </table>

    <input type="submit" value="OK" />

Это мой взгляд на VMQuestion

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EnterpriseConnectMVC.Controllers.VMQuestion>" %>

<tr>
  <td><%= Model.Question %></td>
  <td>
    <%= Html.TextBoxFor(m=>m.Answer) %>
    <%= Html.ValidationMessageFor(m=>m.Answer) %>
  </td>
</tr>

2 - Тогда как мне вернуть значения, когда пользователь нажал кнопку отправки?

Заранее спасибо.

1 Ответ

1 голос
/ 24 января 2011

Я бы принял параметр IEnumerable<VMQuestion> в действии POST.

Вам потребуется добавить индекс к свойствам каждого VMQuestion, чтобы связыватель модели по умолчанию связывал коллекцию.Смотрите эту статью: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

...