0

我正在使用 MVC3 并尝试利用子操作功能@Html.Action(),因此我有以下视图

    @foreach(Model.Items 中的变量项){
        @Html.Action("GetFormItemView", "问题", item});
    }

这将调用以下方法

    [仅限儿童操作]
    公共 ActionResult GetFormItemView(FormItem formItem)
    {
        if (formItem 是 FormSection)
        {
            返回 GetSectionView(formItem 作为 FormSection);
        }
        else if (formItem 是 QuestionItem)
        {
            返回 GetTypedQuestionView(formItem 作为 QuestionItem);
        }
        别的
        {
            抛出新的 NotImplementedException();
        }
    }

此时模型绑定炸弹告诉我它无法创建抽象类......

“/”应用程序中的服务器错误。无法创建抽象类。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.MissingMethodException:无法创建抽象类。

如何让模型绑定器不碍事 - 我已经为动作提供了必要的模型......?

4

2 回答 2

0

问题是模型绑定器不知道如何仅根据参数重新创建您的具体类。自己查看视图,您会发现 Model Binder 无法知道创建正确的类。

模型绑定器应该足够聪明,可以遍历基类的后代并实例化正确的,但不幸的是,事实并非如此。可能有一些边缘情况使这不可靠。

最简单的解决方案是为每个具体模型类型创建单独的操作。存在更复杂的解决方案,您可以查看此问题以获取示例。

于 2011-09-19T15:46:22.483 回答
0

在黑暗中刺伤,但我认为你需要:

@foreach (var item in Model.Items){
   @Html.Action("GetFormItemView", "Question", new {formItem = item});
}
于 2011-09-19T15:28:20.153 回答