将.ascx转换为razor语法的问题

时间:2011-04-26 18:21:18

标签: razor

将.ascx模板转换为razor语法时遇到很多问题。任何人都可以帮助我吗?

@{
bool ShouldShow(ModelMetadata metadata) {
    return metadata.ShowForDisplay
        && metadata.ModelType != typeof(System.Data.EntityState)
        && !metadata.IsComplexType
        && !ViewData.TemplateInfo.Visited(metadata);
    }
}

@if (Model == null) { 
    ViewData.ModelMetadata.NullDisplayText
} else if (ViewData.TemplateInfo.TemplateDepth > 1) {
    ViewData.ModelMetadata.SimpleDisplayText
} else {
    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) {
    if (prop.HideSurroundingHtml) {
        Html.Display(prop.PropertyName)
    } else {
        if (!String.IsNullOrEmpty(prop.GetDisplayName())) {
            <div class="display-label">@prop.GetDisplayName()</div>
        } 
        <div class="display-field">@Html.Display(prop.PropertyName)</div>
    } 
}

看起来上面的代码是正确的(至少从我的角度来看)。

更新

我对ShouldShow方法没有任何intellisense!为什么?我有很多编译错误。

错误1}预期PATH \ Object.cshtml 1 1 PROJ 错误5命名空间不能直接包含诸如字段或方法之类的成员PATH \ Object.cshtml 11 3 PROJ 错误4类,结构或接口成员声明中的标记'}'无效PATH \ Object.cshtml 11 1 PROJ 等等!

1 个答案:

答案 0 :(得分:1)

要插入班级成员(例如bool ShouldShow),您需要使用@functions block