0

谁能帮我找出为什么这不起作用:

模型:

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以模式为参数的动作,为什么?

4

1 回答 1

0

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

new CreateAdCategoryTypeViewModel(CategoryDropDownList())

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

于 2013-01-04T16:28:04.353 回答