模型不绑定到行动

时间:2013-01-03 14:58:33

标签: c# jquery asp.net-mvc asp.net-mvc-4 t4mvc

任何人都可以帮我找到为什么这不起作用:

型号:

public class CreateAdCategoryViewModel
{
    [Display(ResourceType = typeof(HeelpResources), Name = "AdViewModel_Category_Label")]
    [Required(ErrorMessageResourceName = "AdViewModel_Required_ErrorMsg", ErrorMessageResourceType = typeof(HeelpResources))]
    public int Category_Id { get; set; }

    public IEnumerable<SelectListItem> CategoryList { get; set; }

    public CreateAdCategoryViewModel(IEnumerable<SelectListItem> categoryList)
    {
        CategoryList = categoryList;
    }
}

控制器:

    [Authorize]
    [HttpPost]
    public virtual PartialViewResult CreateAdCategoryType(CreateAdCategoryViewModel model)
    {
        // Build the ViewModel to return to the View with the Category Drop List
        return PartialView(new CreateAdCategoryTypeViewModel(CategoryDropDownList()));
    }

查看:

@model Heelp.ViewModels.CreateAdCategoryViewModel

@using (Ajax.BeginForm(MVC.Ad.CreateAdCategoryType(), new AjaxOptions { UpdateTargetId = "category_type", InsertionMode = InsertionMode.Replace }, new { @id = "categoryForm" }))
{
    @Html.DisplayNameFor(m => m.Category_Id)
    @Html.DropDownListFor(m => m.Category_Id, Model.CategoryList, HeelpResources.DropdownlistCategoryFirstRecord)
    @Html.ValidationMessageFor(m => m.Category_Id)
}

提交是由Javascript:

完成的
$(document).ready(function ()
{
    $("#Category_Id").change(function ()
    {
        $("#categoryForm").submit();
    });
});

这里的问题是提交从未找到以模式为参数的操作CreateAdCategoryType,为什么?

1 个答案:

答案 0 :(得分:0)

当谈到进入控制器的模型时,它们需要是POCO。如果你没有无参数构造函数,MVC框架根本不会知道如何创建实例。请记住,它需要保湿您的模型。它不知道该怎么做

new CreateAdCategoryTypeViewModel(CategoryDropDownList())

它需要创建一个实例并发现(反映)所有公共属性并对其进行水合。在你的情况下,即使它(框架)找到构造函数,它也不知道要向它提供什么数据。虽然,我认为,它只寻找无参数构造函数。