列表不会通过updatemodel持久化

时间:2011-10-26 20:18:09

标签: asp.net-mvc

如果我使用UpdateModel,我的通用产品列表将不会在Post上保留,但是如果我将ViewModel作为参数传递给我的post action方法,它是否有效?如何通过UpdateModel方式使其工作?

我正在使用asp.net fx3.5 mvc 1.0

模型

namespace PostingGenericListAndUpdateModel.ViewModels
{
    public class Product
    {
        public string Name { get; set; }
        public bool IsSelected { get; set; }
    }
    public class ProductViewModel
    {
        public int OrderId { get; set; }
        public List<Product> Products { get; set; }

        public ProductViewModel()
        {
            Products = new List<Product>();
            Products.Add(new Product() { Name = "Widget 1", IsSelected = false });
            Products.Add(new Product() { Name = "Widget 2", IsSelected = false });
        }
    }
}

查看

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>
<% using (Html.BeginForm())
   { %>
<% for (int i = 0; i < 2; i++)
   { %>
      <%= Model.Products[i].Name %>  <%= Html.CheckBox("Model.Products[" + i + "].IsSelected") %>
   <% } %>
<input id="Submit1" type="submit" value="submit" />           
   <% } %>

</asp:Content>

控制器

public ActionResult Index()
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    ProductViewModel model = new ProductViewModel();

    return View(model, new string[] { "OrderId", "Products" });
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection form)  //It will work if i accept the view model
{
    ProductViewModel model = new ProductViewModel();

    UpdateModel(model);

    return View(model);
}

1 个答案:

答案 0 :(得分:2)

我认为这个参数'string sender'没有理由。你为什么需要它?

通常,通过接受视图模型作为Post方法的参数,通常可以这样做。

这是MVC将信息从视图传递给控制器​​的方式。

你的Post方法行应该是:

public ActionResult Index(ProductViewModel model)