C#表单点击提交与回车提交时collections参数值不一致如何解决
问题根因
- 表单绑定了
data-component="search"自定义组件,大概率是该组件的回车提交逻辑只读取了搜索输入框的值,没有同步携带隐藏的collections参数提交,才会出现点击按钮走原生表单提交正常、回车走自定义JS逻辑参数丢失的问题 - 小概率场景:无自定义JS逻辑时,可能是浏览器对单输入框表单回车提交的兼容性问题,该场景占比极低
解决方案
方案1:前端修复(优先推荐,从根源解决参数丢失问题)
首先检查search组件的回车事件绑定逻辑,修改时补充携带collections隐藏域的值即可。如果不想调整原有组件逻辑,也可以给输入框单独绑定回车事件,强制触发表单原生提交,会自动携带所有表单字段:
document.getElementById('landing-header-search').addEventListener('keydown', function(e) { if (e.key === 'Enter') { e.preventDefault(); this.closest('form').submit(); } })
如果是浏览器单输入框兼容性问题,也可以在表单中新增一个隐藏的无用文本输入框骗过浏览器判定:
<input type="text" style="display:none" aria-hidden="true" />
将上述代码放在现有collections隐藏输入框旁即可。
方案2:后端兜底(无需修改前端代码,兼容所有提交场景)
直接在后端参数初始化逻辑中给collections加默认值兜底,即使前端传空也不会出现Null:
[QsParams("searchterm", "collections", "searchcoll", "page")] public ActionResult Index(string searchTerm, string[] collections, string searchcoll, PagerParameters pagerParameters) { _metaService.SetMeta("robots", "noindex,nofollow"); searchcoll = searchcoll ?? "All"; // 新增兜底逻辑,collections为空时默认赋值 collections ??= new[] { "forumdiscussion" }; // 如果需要和searchcoll逻辑对齐,可替换为 collections ??= new[] { searchcoll }; // create breadcrumb shape var breadcrumbShape = _orchardServices.New.Parts_Breadcrumbs( Breadcrumbs: _breadcrumbsService.GetBreadcrumbLinks("Home [] > Search []") ); // create search box shape var searchBoxShape = _orchardServices.New.Parts_Search_Box( IsSearchPage: true, Query: searchTerm, SearchCollections: collections ); }
内容的提问来源于stack exchange,提问作者devram
相关产品推荐
相关产品推荐

