【发布时间】:2018-03-07 00:58:25
【问题描述】:
更新:问题已解决。
Darin Dimitrov 的回答包含指向另一个相关问题的链接。该页面上的One of the proposed solutions 最终为我们工作。
原始问题
下面的代码示例在 MVC 2 中有效,但在 MVC 3 中引发异常。有谁知道为什么 MVC 3 引入了这种重大更改?有没有办法让它在 MVC 3 中工作,同时仍然允许我将视图模型描述为视图中的接口?
StackOverflow 上还有另一个 related question,但它没有提供任何关于 MVC 2 和 MVC 3 之间为何存在差异的信息。
型号
public interface IPerson {
string Name { get; set; }
}
public interface ISpy : IPerson {
string CodeName { get; set; }
}
public class Spy : ISpy {
public string Name { get; set; }
public string CodeName { get; set; }
}
控制器动作
public ActionResult Index() {
var model = new Spy { Name = "James Bond", CodeName = "007" };
return View(model);
}
MVC2 视图(完美运行)
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcApp.Models.ISpy>" %>
<p>CodeName: <%: Html.TextBoxFor(x => x.CodeName) %></p>
<p>Name: <%: Html.TextBoxFor(x => x.Name) %></p>
MVC3 视图(抛出异常)
@model MvcApp.Models.ISpy
<p>Name: @Html.TextBoxFor(x => x.Name)</p>
<p>CodeName: @Html.TextBoxFor(x => x.CodeName)</p>
MVC3 异常信息
我在下面显示了相关的异常信息,但您可以在此处查看错误页面的整个输出:https://gist.github.com/1443750。
Runtime Exception
System.ArgumentException: The property **`MvcApp.Models.ISpy.Name`** could not be found.
Source Error:
Line 1: @model MvcApp.Models.ISpy
Line 2: <p>CodeName: @Html.TextBoxFor(x => x.CodeName)</p>
Line 3: <p>Name: @Html.TextBoxFor(x => x.Name)</p>
Stack Trace:
[ArgumentException: The property MvcApp.Models.ISpy.Name could not be found.]
System.Web.Mvc.AssociatedMetadataProvider.GetMetadataForProperty(Func`1 modelAccessor, Type containerType, String propertyName) +502169
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) +421
System.Web.Mvc.Html.InputExtensions.TextBoxFor(HtmlHelper`1 htmlHelper, Expression`1 expression, IDictionary`2 htmlAttributes) +58
System.Web.Mvc.Html.InputExtensions.TextBoxFor(HtmlHelper`1 htmlHelper, Expression`1 expression) +50
ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Projects\MvcApplication1\MvcApplication1\Views\Home\Index.cshtml:3
帮助我们 Darin Dimitrov,你是我们唯一的希望。
【问题讨论】:
-
+1 呼吁达林。必须在约翰内。
标签: asp.net-mvc asp.net-mvc-3 model-binding