我有这个型号:
public class DefinitionListModel : List<DefinitionListItemModel>
{
}
然后我在DisplayTemplates中为它设置了这个显示模板(局部视图):
@model Company.Product.Models.DefinitionListModel
<dl>
@foreach (var definition in Model)
{
Html.DisplayFor(m => definition);
}
</dl>
哪个调用此默认显示模板,因为每个项目都是 DefinitionListItemModel
:
@model Company.Product.Models.DefinitionListItemModel
@Html.DisplayFor(m => m.Term, "DefinitionTerm");
@Html.DisplayFor(m => m.Description, "DefinitionDescription");
DefinitionTerm
模板如下所示:
@model object
@{
if (Model != null)
{
string s = Model as string;
if (s != null)
{
<dt>@s</dt>
}
else
{
// Other types and models that could be used.
// Last resort.
<dt>@Model.ToString()</dt>
}
}
}
成功命中放置在最后一个模板中的断点,并且视图和标记看起来很好,但没有渲染,甚至没有上面第一个模板的DL标记 .
为什么它会破坏断点但不渲染任何HTML?
2 回答
这与半冒号有关 . 似乎我不能像使用分号终止符的普通C#方法一样调用
Html.DisplayFor
.例如,这是修订后的
DefinitionListModel
模板:请注意
@
在代码块中的奇怪用法's already C#. I assume there'是从C#块中执行DisplayFor
的正确方法,但我不知道它是什么 .它's not because of the semicolon, it'因为缺少了
@
. 这就是Razor
的工作原理 . 大括号之间的内容不应该是C#
.Razor
解析器试图找出's code and what'的内容 . 要开始一段代码,您必须设置@
字符 .Razor
解析器将大括号之间的所有内容标识为内容 .查看Scott's blog了解一些非常好的例子 .