0

我有一个 ProductListingViewModel 类型的强类型视图,它又包含一个 ProductViewModel。(两个自定义视图模型)。

我的页面上有一些表单元素,它们的创建方式如下:

<%: Html.DropDownListFor(m => m.ProductViewModel.CategoryId, Model.Categories)%>

生成 HTML:

<select name="ProductViewModel.CategoryId" id="CategoryId">

使用默认模型绑定,我希望当我发布到接受 ProductListingViewModel 类型参数的控制器操作时,它会知道用相关数据填充 ProductViewModel.CategoryId。

选择列表的名称似乎表明它知道有一个具有 CategoryId 属性的 ProductViewModel 但是当我发布到我的控制器方法时,ProductViewModel 为空。如果我在构建 ProductListingViewModel 期间创建它,那么它不再为空,但默认绑定器似乎没有像我预期的那样填充属性。

这是自定义模型绑定器的情况,还是我只是缺少一些基本的东西?

干杯。

4

2 回答 2

1

让我试着总结一下(如果我错了,请纠正我)。

模型:

public class ProductListingViewModel
{
    public ProductViewModel ProductViewModel { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
}

public class ProductViewModel
{
    public string CategoryId { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new ProductListingViewModel
        {
            Categories = new SelectList(new[]
            {
                new { Value = "1", Text = "category 1" },
                new { Value = "2", Text = "category 2" }
            }, "Value", "Text")
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(ProductListingViewModel model)
    {
        return View(model);
    }
}

看法:

<% using (Html.BeginForm()) { %>
    <%: Html.DropDownListFor(m => m.ProductViewModel.CategoryId, Model.Categories)%>
    <input type="submit" value="OK" />
<% } %>

现在,当您提交表单时,您将获得:

model.ProductViewModel.CategoryId = the id that was selected in the drop down list

不是你追求的吗?

于 2010-07-16T16:41:04.037 回答
0

在我看来,默认活页夹应该在这种情况下工作。

您是否尝试使用 Fiddler 检查客户端发送的数据?

控制器动作的签名到底是什么?

于 2010-07-16T16:46:10.533 回答