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 に答える