当我尝试呈现其模型类型被指定为一个局部视图:

@model dynamic

通过使用以下代码:

@{Html.RenderPartial("PartialView", Model.UserProfile);}

我出现以下情况例外:

'System.Web.Mvc.HtmlHelper<dynamic>' has no applicable method named 'RenderPartial' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax.

然而,在一个.aspx文件相同的代码工作完美无缺。任何想法?

有帮助吗?

解决方案

刚刚找到了答案,看来我在那里放置的RenderPartial代码视图有一个动态模型,因此,MVC无法选择正确的方法来使用。铸造模型中的RenderPartial呼叫到正确类型固定的问题。

源:使用Html.RenderPartial()中的ascx文件

其他提示

而不是铸造在的RenderPartial调用模型,由于您使用的剃须刀,你可以从

修改的第一行视图
@model dynamic

@model YourNamespace.YourModelType

这对你的看法有充分的@Html.Partial通话工作的优势,也让你的智能感知的性能。

也可以被称为

@Html.Partial("_PartialView", (ModelClass)View.Data)

有另外一个原因,这可以被抛出,即使你不使用动态/ ExpandoObject。如果你正在做一个循环,像这样的:

@foreach (var folder in ViewBag.RootFolder.ChildFolders.ToList())
{
    @Html.Partial("ContentFolderTreeViewItems", folder)
}

在这种情况下,“无功”,而不是类型声明会抛出同样的错误,尽管RootFolder是类型的文件夹“,通过改变VAR实际类型,问题消失。

@foreach (ContentFolder folder in ViewBag.RootFolder.ChildFolders.ToList())
{
    @Html.Partial("ContentFolderTreeViewItems", folder)
}

下面是通过动态对象的视图(或部分视图)的方式

添加以下类的任意位置在您的解决方案(使用系统命名空间,所以其准备使用,而无需添加任何引用) -

    namespace System
    {
        public static class ExpandoHelper
        {
            public static ExpandoObject ToExpando(this object anonymousObject)
            {
                IDictionary<string, object> anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject);
                IDictionary<string, object> expando = new ExpandoObject();
                foreach (var item in anonymousDictionary)
                    expando.Add(item);
                return (ExpandoObject)expando;
            }

        }
    }

在该模型发送给视图,将其转换为Expando的:

    return View(new {x=4, y=6}.ToExpando());

干杯

我有同样的问题:在我的情况下,这是我做的。

@Html.Partial("~/Views/Cabinets/_List.cshtml", (List<Shop>)ViewBag.cabinets)

和在局部视图

@foreach (Shop cabinet in Model)
{
    //...
}

我玩弄C#代码的我意外地发现,解决问题的方法哈哈

这是用于主要视图的代码:

`@model dynamic 
 @Html.Partial("_Partial", Model as IDictionary<string, object>)`

然后,在局部视图:

`@model dynamic 
 @if (Model != null) { 
   foreach (var item in Model) 
   { 
    <div>@item.text</div> 
   } 
  }`

它的工作对我来说,我希望这将帮助你太!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top