首页 文章

ASP.NET显示模板 - 无输出

提问于
浏览
0

我有这个型号:

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 回答

  • 2

    这与半冒号有关 . 似乎我不能像使用分号终止符的普通C#方法一样调用 Html.DisplayFor .

    例如,这是修订后的 DefinitionListModel 模板:

    @model AcmeCo.Hudson.Models.DefinitionListModel
    
    @if (Model != null)
    {
        <dl>
            @foreach (var definition in Model)
            {
                @Html.DisplayFor(m => definition)
            }
        </dl>
    }
    

    请注意 @ 在代码块中的奇怪用法's already C#. I assume there'是从C#块中执行 DisplayFor 的正确方法,但我不知道它是什么 .

  • 0

    它's not because of the semicolon, it'因为缺少了 @ . 这就是 Razor 的工作原理 . 大括号之间的内容不应该是 C# . Razor 解析器试图找出's code and what'的内容 . 要开始一段代码,您必须设置 @ 字符 . Razor 解析器将大括号之间的所有内容标识为内容 .

    查看Scott's blog了解一些非常好的例子 .

相关问题