asp.net mvc:自定义ViewModel表单发布

时间:2009-07-31 14:53:57

标签: jquery asp.net-mvc

刚开始使用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 个答案:

答案 0 :(得分:3)

尝试为ViewModel使用无参数构造函数。此外,属性的名称需要与控件的名称/ ID匹配。

您可能需要简化一下,甚至可以编写自己的模型装订器。

模型粘合剂及其使用的解释here

关于编写模型绑定器here的好文章。

我认为你需要编写自己的绑定器,因为你正在尝试构建一个复杂类型的数组。它本身的复杂类型会很好,它就是数组中问题开始的地方。

祝你好运!

答案 1 :(得分:0)

发布表单后,只会将选定的单选按钮值发回服务器。

您应该能够使用UpdateModel()方法自动使用从表单中回发的值更新模型类。