【问题标题】:Ajax.BeginForm not creating a form tag inside the domAjax.BeginForm 不在 dom 中创建表单标签
【发布时间】:2015-10-15 05:24:29
【问题描述】:

在我的 MVC 项目中,我使用 ajax 表单根据修改后的搜索词动态更新一些搜索结果。

在渲染Ajax.BeginForm() 方法时,它不会在页面上(在DOM 中)渲染<form> 标记

一切都设置好了,Jquery、Unobtrusive 和 AJAX 都被引用了,我在其他地方有工作 Ajax.BeginForm 实例

@using (Ajax.BeginForm("FilterSearch","Attachment", new AjaxOptions()
    {
        OnComplete = "updateSearchResults",
        HttpMethod = "POST"
    },new{}))
    {
        @Html.HiddenFor(model => model.AccountId)
        @Html.HiddenFor(model => model.ContactId)
        @Html.HiddenFor(model => model.OpportunityId)


        @Html.TextBoxFor(model => model.SearchTerm, new { placeholder = "Search Term", @class = "header-search-box" })
        <input type="submit" class="header-search-input" />
    }

只是在 DOM 中呈现为

<input id="AccountId" name="AccountId" type="hidden" value="">
<input id="ContactId" name="ContactId" type="hidden" value="">
<input id="OpportunityId" name="OpportunityId" type="hidden" value="O6UJ9A001TB1">
<input class="header-search-box" id="SearchTerm" name="SearchTerm" placeholder="Search Term" type="text" value="">
<input type="submit" class="header-search-input">

【问题讨论】:

  • 您的项目中是否存在格式错误的 HTML?另外,您是通过 DOM 调试器(如 Chrome 的检查器)还是通过查看源来检查它?如果存在任何类型的开始/结束标记不一致,Chrome(和其他)将无法正确显示结构(并且随后会丢失各种元素)。
  • 通过检查器,因为页面本身是通过 AJAX 加载的,但是 HTML 中没有错误。在自己的页面中加载时,它会呈现 Form 标签
  • 有嵌套表格的机会吗?长话短说,Ajax.BeginForm 无论如何都会输出&lt;form&gt;。我唯一能想到的是后处理(AJAX 处理程序)正在搞砸它([un]justly)。
  • 它很可能是一个嵌套形式 - 好主意,我会检查一下。谢谢
  • 太好了,感谢您的提示。页面上方有一个表格,不必要地一直向下到底部。如果您做出答案,则将其标记为正确:)

标签: ajax asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller


【解决方案1】:

尝试的事情(一般来说):

  1. 检查您的源代码(而不是 DOM 解释的内容)。
    • DOM 是基于浏览器/HTML 解析器如何解释页面,现在它可能是如何实际输出的。 (在解析器的最大能力范围内,无效标记通常会被抑制,并且不会显示在调试工具中,但仍会保留在页面上)。
  2. 确认您没有任何未对齐的标记。
    • Razor 足够智能,可以检测到无效标记,并且可能正在清理输出(并修复潜在错误),但并非以您期望的方式。
  3. 鉴于这是动态内容,请确保您没有嵌套表单。
    • Ajax.BeginForm(和其他表单助手)提供 &lt;form&gt;/&lt;/form&gt; 标签无论如何;它在 ctor/de-ctor 方法中输出这些标签。
    • 某种后处理(在 AJAX 处理器一侧)可能会“清理”输出以避免无效的 HTML(例如嵌套的表单标签)。如果它发现已经有一个&lt;form&gt;,它可能会从引入的任何补充标记中删除该标签。

【讨论】:

    【解决方案2】:

    您不能在另一个表单中创建一个表单。检查您的父视图以确保您没有意外启动表单,然后包含此部分页面。

    (感谢@LiamHT 的提示)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      相关资源
      最近更新 更多