首页 文章

ASP.NET MVC3 TextBoxFor,EditorFor,ValidateFor not rendering

提问于
浏览
1

我一直在围绕这个问题绞尽脑汁。我有一个在 ASP.NET 中围绕 WebSite 构建的遗留应用程序。我添加了适当的东西以允许添加 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 不为 null 并且该部分看起来很好。

任何 help/suggestions 将不胜感激。

谢谢

1 回答

  • 0

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

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

    您还需要确保 the_1_String 标记位于编辑器模板的顶部

    从我可以看到你的模板不是实际使用你发送给它的模型数据,它只是使用 ViewData 对象。

相关问题