相关疑难解决方法(0)

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;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个局部视图,它使用IActivity从其他具体的部分重用.

以下是Activity Partial的定义.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IActivity>" %>
<%: Html.HiddenFor(item => item.AuthorId) %>
Run Code Online (Sandbox Code Playgroud)

但是,它会引发异常.它在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 …
Run Code Online (Sandbox Code Playgroud)

asp.net html-helper modelmetadata asp.net-mvc-3

18
推荐指数
5
解决办法
4913
查看次数

Model Binding找不到的继承接口属性

我对这个问题感到困惑,我不确定这是不是我对MVC框架,.NET框架或者什么不了解.但是在这里可以理解来自任何角落的一些解释.

我正在尝试做的事情:使用ASP.NET MVC3模型绑定在视图中呈现HTML控件.具体来说,我试图绑定到一个接口而不是一个具体的类.

错误:ArgumentException"无法找到属性[blah]." 在页面加载期间抛出.

代码:

Interface IFoundation
{
  int Id { get; set; }
}

Interface IChild: IFoundation
{
  string Name { get; set; }
}

Class Concrete: IChild
{
  int Id { get; set; }
  string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

风景:

@model IChild
@Html.EditorFor(x => x.Id)
Run Code Online (Sandbox Code Playgroud)

当我尝试加载视图时,从对EditorFor()的调用抛出ArgumentException,指出无法找到Id属性.但是,如果我改为绑定到Concrete类,绑定工作正常.

那么有谁知道为什么EditorFor()无法从基接口解析继承的属性?

.net c# razor asp.net-mvc-3

7
推荐指数
1
解决办法
2340
查看次数

标签 统计

asp.net-mvc-3 ×2

.net ×1

asp.net ×1

c# ×1

html-helper ×1

modelmetadata ×1

razor ×1