【发布时间】:2012-05-23 02:14:43
【问题描述】:
我的情况很奇怪。我有一个模型和两个模板,它们都是这个模型类型的强类型。模板是嵌套的,或者换句话说,我在第一个模板中的第二个模板上使用 DisplayFor。如果我使用与第一个模板关联的模型,则在第二个模板的 DisplayFor 调用中,第二个模板不会呈现。如果我使用相同模型类型的另一个实例,一切正常。似乎对与嵌套模板关联的模型进行了某种循环检查。
型号:
public class MyModel
{
public string Value { get; set; }
public MyModel Copy
{
get { return (MyModel) this.MemberwiseClone(); }
}
public MyModel MySelf
{
get { return this; }
}
}
显示模板1:
@model TestNestedTemplateSameReference.Models.MyModel
<div>Model1</div>
<div>@Model.Value</div>
<div>@Html.DisplayFor(x=>x, "ModelTemplate2")</div>
显示模板2:
@model TestNestedTemplateSameReference.Models.MyModel
<div>Model2</div>
<div>@Model.Value</div>
有趣的是,如果不是调用
@Html.DisplayFor(x=>x, "ModelTemplate2")
我用 Copy 属性调用它
<div>@Html.DisplayFor(x=>x.Copy, "ModelTemplate2")</div>
一切正常,因为 MyModel 类的实际实例不同。
有谁知道为什么这样做。是否有可行的解决方法。看起来这是一种完全合法的用法,不应导致堆栈溢出或任何类似问题。我可以看到如何使用它来防止没有模板名称的 DisplayFor 调用循环,但是如果我指定模板名称,它似乎应该可以正常工作。
将同一个模型绑定到多个 EditFor 模板似乎很危险,但 DisplayFor 似乎是安全的。
我当然可以为嵌套级别创建一个单独的模型,但那是创建冗余类。
感谢任何帮助。
【问题讨论】:
标签: asp.net-mvc