I have a lot of problem for converting .ascx templates into razor syntax. Can anyone help me?
@{
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>
}
}
It’s seems above code is correct (at least from my perspective).
UPDATE
I don’t have any intellisense for ShouldShow method! why? I’ve a lot of compilation errors.
Error 1 } expected PATH\Object.cshtml 1 1 PROJ
Error 5 A namespace cannot directly contain members such as fields or methods PATH\Object.cshtml 11 3 PROJ
Error 4 Invalid token ‘}’ in class, struct, or interface member declaration PATH\Object.cshtml 11 1 PROJ
and so on!
To insert class-level members (such as your
bool ShouldShow), you need to use an@functionsblock.