Die*_*ego 64 asp.net-mvc razor asp.net-mvc-3
当我尝试渲染其模型类型指定为的部分视图时:
@model dynamic
Run Code Online (Sandbox Code Playgroud)
使用以下代码:
@{Html.RenderPartial("PartialView", Model.UserProfile);}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
'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.
Run Code Online (Sandbox Code Playgroud)
但是,.aspx文件中的相同代码完美无瑕.有什么想法吗?
Die*_*ego 54
刚刚找到答案,看来我放置RenderPartial代码的视图有一个动态模型,因此,MVC无法选择正确的方法来使用.将模型在RenderPartial调用中转换为正确的类型修复了问题.
source:在ascx文件中使用Html.RenderPartial()
jua*_*uan 26
而不是在RenderPartial调用中强制转换模型,并且因为您正在使用razor,所以您可以修改视图中的第一行
@model dynamic
Run Code Online (Sandbox Code Playgroud)
至
@model YourNamespace.YourModelType
Run Code Online (Sandbox Code Playgroud)
这样做的好处是可以处理@Html.Partial
视图中的每个调用,还可以为属性提供智能感知.
Tom*_*Tom 17
也可以称为
@Html.Partial("_PartialView", (ModelClass)View.Data)
Run Code Online (Sandbox Code Playgroud)
即使您没有使用dynamic/ExpandoObject,也可以抛出这个原因.如果你正在做一个循环,像这样:
@foreach (var folder in ViewBag.RootFolder.ChildFolders.ToList())
{
@Html.Partial("ContentFolderTreeViewItems", folder)
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"var"而不是类型声明将抛出相同的错误,尽管RootFolder的类型为"文件夹".通过将var更改为实际类型,问题就会消失.
@foreach (ContentFolder folder in ViewBag.RootFolder.ChildFolders.ToList())
{
@Html.Partial("ContentFolderTreeViewItems", folder)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120801 次 |
最近记录: |