ASP.NET MVC 3 HtmlHelper异常不能识别继承的接口上的ModelMetadata
|
升级到MVC 3 RTM后,我得到了以前工作的例外。 这是场景。我有几个对象使用相同的底层接口IActivity和IOwned。 IActivity implements IOwned (another interface)
public interface IActivity:IOwned {...}
public interface IOwned
{
int? AuthorId {get;set;}
}
我有一个部分的观点,使用IActivity从其他具体的部分重用。 这是活动部分的定义。 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IActivity>" %> <%: Html.HiddenFor(item => item.AuthorId) %> 但是,它会引发异常。它在ModelMetadata中找不到AuthorId。 我猜测在以前的版本中,它看到了IActivity实现的接口。 任何想法,建议,短暂的复制类似的界面无处不在? 复制下面的堆栈跟踪。 [ArgumentException: The property IActivity.AuthorId could not be found.] System.Web.Mvc.AssociatedMetadataProvider.GetMetadataForProperty(Func`1 modelAccessor,Type containerType,String propertyName) +498313 System.Web.Mvc.ModelMetadata.GetMetadataFromProvider(Func`1 modelAccessor,Type modelType,String propertyName,Type containerType) +101 System.Web.Mvc.ModelMetadata.FromLambdaExpression(Expression`1 expression,ViewDataDictionary`1 viewData) +393 System.Web.Mvc.Html.InputExtensions.HiddenFor(HtmlHelper`1 htmlHelper,Expression`1 expression,IDictionary`2 htmlAttributes) +57 System.Web.Mvc.Html.InputExtensions.HiddenFor(HtmlHelper`1 htmlHelper,Expression`1 expression) +51 ASP.views_shared_activity_ascx.__Render__control1(HtmlTextWriter __w,Control parameterContainer) in c:Users...DocumentsVisual Studio 2010Projectsngentrunk...ViewsSharedActivity.ascx:3 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) +109 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.UI.Control.Render(HtmlTextWriter writer) +10 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.UI.Page.Render(HtmlTextWriter writer) +29 System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +43 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) +3060 解决方法在System.Web.Mvc.ModelMetadata中的ASP.NET MVC 3中有一个突破性的变化/错误。 FromLambdaExpression方法,它解释了你得到的异常:ASP.NET MVC 2.0: ...
case ExpressionType.MemberAccess:
{
MemberExpression body = (MemberExpression) expression.Body;
propertyName = (body.Member is PropertyInfo) ? body.Member.Name : null;
containerType = body.Member.DeclaringType;
flag = true;
break;
}
...
ASP.NET MVC 3.0 ...
case ExpressionType.MemberAccess:
{
MemberExpression body = (MemberExpression) expression.Body;
propertyName = (body.Member is PropertyInfo) ? body.Member.Name : null;
containerType = body.Expression.Type;
flag = true;
break;
}
...
注意如何为containerType变量分配一个不同的值。所以在你的情况下,在ASP.NET MVC 2.0中,它分配了IOwned的值,这是AuthorId属性的正确声明类型,而在ASP.NET MVC 3.0中,它被分配给IActivity,之后当框架尝试查找属性时崩溃。 这是事情。就决议而言,我会等待微软的一些官方声明。我在发行说明文档中找不到有关这方面的相关信息。这是一个错误还是需要在这里解决的一些功能? 现在,您可以使用非强制类型的Html.Hidden(“AuthorId”)帮助器,或者将Owned指定为您的控件的类型(我知道两个都是吮吸)。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在ASP.NET MVC 4 Beta中禁用Javascript/CSS缩小
- asp.net-mvc – MicrosoftMvcValidation.js VS jquery.vali
- ASP.NET主题图像
- asp.net-web-api – OData V4 WebAPI按Enum的Int值过滤?
- ASP.NET Web应用程序(.NET Framework)与ASP.NET核心Web应用
- asp.net – 使用sql server的Web应用程序中的审计跟踪
- asp.net – URL重写出站规则IIS7
- asp.net-mvc-3 – ASP.Net MVC 3 – 编辑器模板的客户端不显
- asp.net-mvc – 具有指定操作的Response.RedirectToRoute
- asp.net – Outputcache:VaryByHeader =“User-Agent”或V
- asp.net – 使用Global.asax有什么优点和缺点?
- asp.net – 优化的捆绑包在从网站请求时返回404
- asp.net-mvc – EF,ASP MVC依赖注入.多个并发请求
- ASP.NET MVC – IsAjaxRequest()实际上意味着什么
- asp.net – ELMAH日志如何按类型忽略错误
- asp.net – 是否使用CMS
- asp.net – SQL Server Reporting Services – 运
- 如何获取基于PhoneGap的应用程序来对ASP.NET For
- 如何在asp.net的页面加载中调用javascript函数
- asp.net – RadGrid在Visual Studio 2013中打开应
