我一直在为这个问题绞尽脑汁。我有一个围绕 ASP.NET 中的网站构建的遗留应用程序。我添加了适当的东西以允许向其中添加 MVC,并且它大部分都可以正常工作。
我有一个剃刀视图,其中有一个表单标记(封装在 Html.BeginForm 中)。我还为字符串创建了一个自定义模板编辑器。我遇到的问题是,当我想渲染一个普通的文本框、editorfor 或 ValidateFor 时,ValidationSummary 不会生成任何标记。我的自定义模板已执行,但任何正常的 HtmlHelper 似乎都不起作用。
这是我的观点(这是部分观点)
@model L1.Web.UI.Infrastructure.SectionWrapper<L1.Web.ViewModel.PersonInfoViewModel>
<div class="section">
@using (Html.BeginForm())
{
<div class="pad_10" data-bind="with: sections['PersonInfo']">
<div data-bind="with: data">
@Html.ValidationSummary(true)
<table class="full-table form-horizontal">
<tbody>
<tr>
<td width="30%" class="dotted-border-right">
<!-- This kinda work -->
@Html.EditorFor(m => m.SectionData.Data.LastName,
"modelTemplateString",
new {SectionName = "PersonInfo"})
!-- This doesn't render anything -->
@Html.EditorFor(m => m.SectionData.Data.LastName)
在我的自定义模板中,我正在渲染纯 HTML,它可以工作。当我在我的自定义模板中执行 EditorFor 时,它会部分起作用。我没有看到任何正在生成的验证属性。我的自定义模板中的 ValidateFor 或 ValidationMessageFor 也不会生成任何标记。这是我的自定义模板中的代码(位于 /Shared/EditorTemplates 中)
@inherits WebViewPage<string>
<div class="control-group">
<label class="control-label" for="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" data-bind="localized: {resourceId: '@ViewData.ModelMetadata.PropertyName', resourceStore: $root}"></label>
<div class="controls">
<input id="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" class="input-small" type="text" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isEditing, value: @ViewData.ModelMetadata.PropertyName"/>
<a class="edit-link" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isInReadMode">
<strong data-bind="text: @ViewData.ModelMetadata.PropertyName"></strong>
</a>
@{ Html.ValidateFor(m => m); }
</div>
我还尝试从项目中完全删除我的自定义模板,认为它总是被使用,即使没有在 EditorFor 中指定自定义模板名称。这并没有什么不同。看起来我的项目部分无法呈现任何 HtmlHelpers。
我还检查了创建表单标记后 ViewContext.FormContext 不为空,并且该部分看起来很好。
任何帮助/建议将不胜感激。
谢谢