asp.net mvc: пользовательская форма представления ViewModel - PullRequest
3 голосов
/ 31 июля 2009

Просто начинаю с ASP.NET MVC и уже сталкиваюсь с камнем преткновения.

Ситуация такова, что у меня есть пользовательская ViewModel для передачи в представление, которое содержит список элементов, которые должны быть оценены (будет использоваться рейтинг звезды jQuery), поэтому они создаются с помощью переключателя-переключателя то же имя, просто другое значение, и они не представляют проблемы.

Однако я абсолютно не представляю, как вернуть это обратно в пост-версию моего действия. Я просто получаю ошибку «без параметров без конструктора». Я не хочу использовать коллекцию форм - я хочу, чтобы мои данные оставались на основе классов.

Кто-нибудь должен был сделать что-нибудь подобное?

Большое спасибо за любые советы.

=============================================== ========================

ОБНОВЛЕНИЕ (основной код включен):

    In the HomeController:

    public class MyViewModel 
    {
        public MyViewModel(List<Thing> things ) // Thing.cs contains properties name and rating
        {
            this.Things = things;           
        }

        public List<Thing> Things { get; private set; }
    }


   public ActionResult Index()
   {
        List<Thing> things = new List<Thing>();

        Thing t;

        t = new Thing();
        t.name = "One";
        t.rating = 1;
        things.Add(t);

        t = new Thing();
        t.name = "Two";
        t.rating = 2;
        things.Add(t);

        return View(new MyViewModel(things));  
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index( MyViewModel vm)
    {
        return View();
    }       

    and in the Index page ( Inherits="System.Web.Mvc.ViewPage<MyProject.Controllers.MyViewModel>" )

 <% using (Html.BeginForm())
   {%>
    <ul>
    <%  for( int t = 0; t<Model.Things.Count; t++)
        {%>
            <li>
                <% for (int i = 1; i < 6; i++)
                   {
                       MyProject.Thing thing = Model.Things[i];
                       %>
               <%=Html.RadioButton(String.Format("Things[{0}]", t), i)%>
                   <% } %>

            </li>
    <%  }%>
    </ul>    
    <input type="submit" value="submit me" />
<% } %>               

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Попробуйте использовать конструктор без параметров для ViewModel. Кроме того, имена свойств должны совпадать с именами / идентификаторами элементов управления.

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

Объяснение модельных связующих и их использование здесь .

Хорошая статья о написании связующего для модели здесь .

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

Удачи!

0 голосов
/ 31 июля 2009

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

Вы должны иметь возможность использовать метод UpdateModel() для автоматического обновления класса вашей модели значениями, отправленными обратно из формы.

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