Asp.net mvc 3 ASP.NET MVC3 TextBoxFor、EditorFor、ValidateFor未呈现

Asp.net mvc 3 ASP.NET MVC3 TextBoxFor、EditorFor、ValidateFor未呈现,asp.net-mvc-3,rendering,editorfor,Asp.net Mvc 3,Rendering,Editorfor,我一直在为这个问题绞尽脑汁。我有一个围绕ASP.NET中的网站构建的遗留应用程序。我添加了适当的东西来允许添加MVC,并且它基本上可以正常工作 我有一个razor视图,其中有一个表单标签(封装在Html.BeginForm中)。我还为字符串创建了一个自定义模板编辑器。我遇到的问题是,当我想要呈现一个普通的文本框、editorfor或ValidateFor时,ValidationSummary不会生成任何标记。我的自定义模板已执行,但任何正常的HtmlHelper似乎都不起作用 这是我的观点(部分

我一直在为这个问题绞尽脑汁。我有一个围绕ASP.NET中的网站构建的遗留应用程序。我添加了适当的东西来允许添加MVC,并且它基本上可以正常工作

我有一个razor视图,其中有一个表单标签(封装在Html.BeginForm中)。我还为字符串创建了一个自定义模板编辑器。我遇到的问题是,当我想要呈现一个普通的文本框、editorfor或ValidateFor时,ValidationSummary不会生成任何标记。我的自定义模板已执行,但任何正常的HtmlHelper似乎都不起作用

这是我的观点(部分观点)

@model L1.Web.UI.Infrastructure.SectionWrapper
@使用(Html.BeginForm())
{
@Html.ValidationSummary(true)
@EditorFor(m=>m.SectionData.Data.LastName,
“modelTemplateString”,
新建{SectionName=“PersonInfo”})
!--这不会呈现任何内容-->
@EditorFor(m=>m.SectionData.Data.LastName)
在我的自定义模板中,我呈现的是纯HTML,这很有效。当我在自定义模板中执行EditorFor时,它部分有效。我看不到任何正在生成的验证属性。我的自定义模板中的ValidateFor或ValidationMessageFor也不会生成任何标记。以下是我的自定义模板中的代码(位于/Shared/EditorTemplates中)

@继承WebViewPage

@{Html.ValidateFor(m=>m);}

我还试图从项目中完全删除我的自定义模板,认为它总是被使用的,即使在EditorFor中没有指定自定义模板名称。这没有什么区别。看起来我的项目部分无法呈现任何HtmlHelpers

我还检查了ViewContext.FormContext在创建表单标记后是否为null,并且该部分看起来很好

如有任何帮助/建议,将不胜感激


谢谢

在/Shared/EditorTemplates文件夹中,编辑器模板的完整文件名是什么

@Html.EditorFor(m=>m.SectionData.Data.LastName)可能会调用String.cshtml,而您的另一个应该称为modelTemplateString.cshtml

您还需要确保@model字符串标记位于编辑器模板的顶部


从我所看到的情况来看,您的模板没有实际使用您发送给它的模型数据,只是使用了ViewData对象。

全名是modelTemplateString.cshtml。问题不是我的自定义模板不工作。它实际上正在渲染它。不工作的是MVC中的默认模板没有渲染任何数据标记。假设您的LastName字段只是一个基本字符串对象,我是否正确?是的,您是正确的。重要的是,即使它是一个字符串,当我进入自定义模板时,我仍然可以从中获得正确的ModelMetadata(在属性所属的模型上下文中)。不整洁的是,我无法使用ValidateFor和Editor。因为,我发现了我的问题…我觉得有点愚蠢。我的web.config中缺少一个键,无法使代码生成任何标记。别忘了添加以下内容:
@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)
@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>