我正在尝试实现一些自定义的EditorTemplates,但它们只是由我的“创建”视图呈现,而不是“编辑”。
模型
public class Page {
public int PageID { get; set; }
[DataType(DataType.Html)]
[AllowHtml]
// I tried including [UIHint("Html")] but this made no difference
public string Content { get; set; }
...
}
/Views/Shared/EditorTemplates/Html.cshtml
@model string
@Html.TextArea("", Model, new { @class = "html"})
/Views/Shared/EditorTemplates/Object.cshtml
@if (ViewData.TemplateInfo.TemplateDepth > 1)
{
@ViewData.ModelMetadata.SimpleDisplayText
} else {
@Html.ValidationSummary(false)
foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit
&& !ViewData.TemplateInfo.Visited(pm)))
{
if (prop.HideSurroundingHtml) {
@Html.Editor(prop.PropertyName)
@prop.DataTypeName
} else {
<div class="form-field">
@if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) {
@Html.Label(prop.PropertyName)
}
@Html.Editor(prop.PropertyName)
</div>
}
}
}
/Views/Page/Create.cshtml (这正确呈现Html.cshtml
)
@model MvcDisplayTemplates.Models.Page
@using (Html.BeginForm()) {
@Html.EditorForModel(Model)
<p><input type="submit" value="Create" /></p>
}
/Views/Page/Edit.cshtml (这只是呈现默认的单行文字编辑器)
@model MvcDisplayTemplates.Models.Page
@using (Html.BeginForm()) {
@Html.EditorForModel(Model)
<p><input type="submit" value="Save" /></p>
}
有趣的是,如果我在EditorFor
上使用Edit.cshtml
,则实际呈现Html.cshtml
。 e.g。
@Html.EditorFor(model => model.Content)
更新:如果我删除object.cshtml
,则Html.cshtml
也会正确呈现。所以这似乎是Object.cshtml
中的一个问题。看起来奇怪的是它适用于一个视图而不是另一个视图
答案 0 :(得分:1)
我通过在Object.cshtml
@Html.Editor(prop.PropertyName, prop.TemplateHint ?? prop.DataTypeName)
仍然不清楚为什么它之前在一个视图中工作但不在另一个视图中工作。