Ajax.BeginForm 没有在 dom 中创建表单标签
Ajax.BeginForm not creating a form tag inside the dom
在我的 MVC 项目中,我使用 ajax 表单根据修改后的搜索词动态更新一些搜索结果。
呈现 Ajax.BeginForm()
方法时,它不会在页面上呈现 <form>
标记(在 DOM 中)
一切都设置好了,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">
要尝试的事情(一般来说):
- 检查您的源代码(而不是 DOM 正在解释的内容)。
- DOM 基于 browser/HTML 解析器解释页面的方式,以及现在实际输出的方式。 (无效标记通常会被抑制,尽解析器的能力,并且不会出现在调试工具中,但仍会位于页面上)。
- 确认您没有任何标记未对齐。
- Razor 足够智能,可以检测无效标记,并且可能会清理输出(并修复潜在的错误),但不是您期望的方式。
- 鉴于这是动态内容,请确保您没有嵌套表单。
Ajax.BeginForm
(和其他表单助手)无论如何都提供 <form>
/</form>
标签;它在 ctor/de-ctor 方法中输出这些标签。
- 某种 post 处理(在 AJAX 处理器一侧)可能是 "cleansing" 输出以避免无效 HTML (例如嵌套表单标签).如果它发现已经有一个
<form>
,它可能会从引入的任何补充标记中删除该标签。
您不能在另一个表单中创建一个表单。检查您的父视图以确保您没有意外启动表单,然后包含此部分页面。
(感谢@LiamHT 的提示)
在我的 MVC 项目中,我使用 ajax 表单根据修改后的搜索词动态更新一些搜索结果。
呈现 Ajax.BeginForm()
方法时,它不会在页面上呈现 <form>
标记(在 DOM 中)
一切都设置好了,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">
要尝试的事情(一般来说):
- 检查您的源代码(而不是 DOM 正在解释的内容)。
- DOM 基于 browser/HTML 解析器解释页面的方式,以及现在实际输出的方式。 (无效标记通常会被抑制,尽解析器的能力,并且不会出现在调试工具中,但仍会位于页面上)。
- 确认您没有任何标记未对齐。
- Razor 足够智能,可以检测无效标记,并且可能会清理输出(并修复潜在的错误),但不是您期望的方式。
- 鉴于这是动态内容,请确保您没有嵌套表单。
Ajax.BeginForm
(和其他表单助手)无论如何都提供<form>
/</form>
标签;它在 ctor/de-ctor 方法中输出这些标签。- 某种 post 处理(在 AJAX 处理器一侧)可能是 "cleansing" 输出以避免无效 HTML (例如嵌套表单标签).如果它发现已经有一个
<form>
,它可能会从引入的任何补充标记中删除该标签。
您不能在另一个表单中创建一个表单。检查您的父视图以确保您没有意外启动表单,然后包含此部分页面。
(感谢@LiamHT 的提示)