相关疑难解决方法(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
查看次数

ASP.NET MVC3中的Razor和接口继承:为什么不能找到这个属性?

在ASP.NET MVC3应用程序中,我的一个Razor视图有一个奇怪的问题.当我将其值写入调试器控制台时,当属性确实存在时,我收到一个错误,告诉我找不到属性.

我的视图将一个名为FormEditViewModel的类作为其模型.FormEditViewModel有一个IForm类型的属性,一个继承自另一个接口IFormObject的接口.IFormObject定义了一个属性Name,因此任何实现IForm的东西都必须实现一个名为Name的属性.具体类型Form实现接口IForm并根据需要定义Name属性.

当我运行代码并检查传递给View的FormEditViewModel对象时,我可以看到它具有IForm类型的属性Form,并且此Form对象具有Name属性.如果我将以下行插入到我的控制器中,要在将FormEditViewModel.Name传递给视图之前写出它的值,输出窗口将显示正确的名称:

Debug.WriteLine("Name: " + vm.Form.Name);
Run Code Online (Sandbox Code Playgroud)

然而,当我运行视图时,我收到一条错误消息"无法找到属性MyCompany.MyApplication.Domain.Forms.IForm.Name".当控制器中的C#代码明显可以时,为什么Razor找不到Name属性?

我的观点是这样的.抛出异常的行是@Html.LabelFor(model => model.Form.Name,"Form title").

@using MyCompany.MyApplication.ViewModels;
@model FormEditViewModel
@{
    ViewBag.Title = "Edit form";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<div class="MyApplicationcontainer">
    @using (Html.BeginForm("UpdateForm", "ZooForm"))
    {
        <div class="formHeader">
            @Html.ValidationSummary(true)
            @Html.Hidden("id", Model.Form.ZooFormId)
            <div id="editFormTitleDiv">
                <div class="formFieldContainer">
                    @Html.Label("Form ID")
                    @Html.TextBoxFor(m => m.Form.ZooFormId, new { @disabled = true })
                </div>
                <div class="formFieldContainer">
                    @Html.LabelFor(model => model.Form.Name, "Form title")
                    @Html.EditorFor(model => model.Form.Name)
                    @Html.ValidationMessageFor(model => model.Form.Name)
                </div>
                ...
Run Code Online (Sandbox Code Playgroud)

这是视图模型:

using System;
using System.Collections.Generic;
using System.Linq; …
Run Code Online (Sandbox Code Playgroud)

c# razor asp.net-mvc-3

13
推荐指数
1
解决办法
5158
查看次数

标签 统计

asp.net-mvc-3 ×2

asp.net ×1

c# ×1

html-helper ×1

modelmetadata ×1

razor ×1