Asp.net mvc 2 “a”是什么;“模板上下文”;在ASP.NET MVC中,它是否会影响客户端ID的生成?

Asp.net mvc 2 “a”是什么;“模板上下文”;在ASP.NET MVC中,它是否会影响客户端ID的生成?,asp.net-mvc-2,Asp.net Mvc 2,我在读史蒂文·桑德森的书,他在书中提到了这个概念,并巧妙地运用了它。然而,这个概念对我来说仍然很模糊。让我想起了web表单中的INamingContainer。官方文件对此也没有多大说明(根据我所能找到的资料)。 另外,在MVC中生成客户端ID时,一般的陷阱和经验法则是什么 public class A { public B B { get; set; } } public class B { public C C { get; set; } } public class C

我在读史蒂文·桑德森的书,他在书中提到了这个概念,并巧妙地运用了它。然而,这个概念对我来说仍然很模糊。让我想起了web表单中的INamingContainer。官方文件对此也没有多大说明(根据我所能找到的资料)。 另外,在MVC中生成客户端ID时,一般的陷阱和经验法则是什么

public class A
{
    public B B { get; set; }
}

public class B
{
    public C C { get; set; }
}

public class C
{
    public string SomeProperty { get; set; }    
}
现在,假设我们有一个强类型为
a
的视图:

@model A
@Html.EditorFor(x => x.B)
在该视图中,我们位于A的上下文中。然后,我们呈现B的编辑器模板:

@model B
@Html.EditorFor(x => x.C)
现在,即使我们在B的模板中,它也记得该模板是在A的上下文中调用的。最后,我们转到C模板:

@model C
@Html.TextBoxFor(x => x.SomeProperty)
在C模板中,它记得该模板是在B的上下文中调用的,B本身是在A的上下文中调用的,因此它将为文本框生成以下名称:

<input type="text" name="B.C.SomeProperty" id="B_C_SomeProperty" />
在C的模板中:

@model C
@Html.TextBoxFor(x => x.SomeProperty)
由于C编辑器模板将为其生成的集合的每个元素呈现:

<input type="text" name="B.C[0].SomeProperty" id="B_C0_SomeProperty" />
<input type="text" name="B.C[1].SomeProperty" id="B_C1_SomeProperty" />
<input type="text" name="B.C[2].SomeProperty" id="B_C2_SomeProperty" />
...

...
让我们举个例子:

public class A
{
    public B B { get; set; }
}

public class B
{
    public C C { get; set; }
}

public class C
{
    public string SomeProperty { get; set; }    
}
现在,假设我们有一个强类型为
a
的视图:

@model A
@Html.EditorFor(x => x.B)
在该视图中,我们位于A的上下文中。然后,我们呈现B的编辑器模板:

@model B
@Html.EditorFor(x => x.C)
现在,即使我们在B的模板中,它也记得该模板是在A的上下文中调用的。最后,我们转到C模板:

@model C
@Html.TextBoxFor(x => x.SomeProperty)
在C模板中,它记得该模板是在B的上下文中调用的,B本身是在A的上下文中调用的,因此它将为文本框生成以下名称:

<input type="text" name="B.C.SomeProperty" id="B_C_SomeProperty" />
在C的模板中:

@model C
@Html.TextBoxFor(x => x.SomeProperty)
由于C编辑器模板将为其生成的集合的每个元素呈现:

<input type="text" name="B.C[0].SomeProperty" id="B_C0_SomeProperty" />
<input type="text" name="B.C[1].SomeProperty" id="B_C1_SomeProperty" />
<input type="text" name="B.C[2].SomeProperty" id="B_C2_SomeProperty" />
...

...

精彩的解释!!谢谢假设框架使用
ModelMetadata.ContainerType
属性获取类型名称前缀是否正确?谢谢您的回答。Peraps@Abhinav将很快将此答案标记为“已接受”!精彩的解释!!谢谢假设框架使用
ModelMetadata.ContainerType
属性获取类型名称前缀是否正确?谢谢您的回答。Peraps@Abhinav将很快将此答案标记为“已接受”!