我的MVC3网站在服务器端有代码,用于检查单击提交表单的提交按钮的名称。当我使用鼠标单击按钮时,该代码有效,但是当我使用回车键时,表单get被张贴,但请求不包含提交按钮的名称。当使用输入键时,HTML表单不包含表单提交按钮名称
是否有一些属性可以在提交按钮上进行设置,以便让它在点击和使用回车键的情况下工作?
这里是我的HTML
<div>Search:</div>
<form action="/Item/Search" method="post">
<input class="fulltextsearch" id="FTSearchText" name="FTSearchText" type="text" value="" />
<input type="submit" value="Go" name="FTSearchButton" />
</form>
</div>
在服务器端,我有一个使用下面的代码,以确定如果用户点击提交按钮自定义模型粘合剂。
//See if the value provider has the required prefix
var hasPrefix = bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName);
var searchPrefix = (hasPrefix) ? bindingContext.ModelName + "." : string.Empty;
var searchButton = GetValue(bindingContext, searchPrefix, "FTSearchButton");
//If this value doesn't have value, the user didn't click the button so exit
if (string.IsNullOrEmpty(searchButton)) {
return null;
}
private static string GetValue(ModelBindingContext context, string prefix, string key) {
var result = context.ValueProvider.GetValue(prefix + key);
return result == null ? null : result.AttemptedValue;
}
编辑 所以,这里是我与这个有问题。我有一个显示项目列表的页面。我有一个'搜索'文本框和HTML格式的提交按钮。当用户在文本框中输入文本并单击搜索按钮或使用回车键时,页面通过http get发送表单数据,并返回找到的前8个记录。该页面然后显示其他页面的页面链接。问题在于,当用户单击页面链接时,表单数据全部为空,并且我的过滤器信息丢失(使用这些链接时,表单不会与表单值一起发布)。所以,我最终显示了一个空白的项目列表(空白搜索返回0结果),而不是分页数据。
通过在我的表单数据中添加按钮名称的检查,我可以确定是否简单地分页数据,或者做一个新的查找。
我希望这是有道理的。
我不确定这会用于我所需要的。我正在使用一个示例,其中一个模型的属性与提交输入控件的名称相同。当按钮被点击时,当MVC模型绑定到表单时,该属性有一个值。你可以在这里看到一个完整的例子http://unboxedsolutions.com/sean/archive/2011/03/30/15977.aspx – 2011-12-20 22:24:28
有趣。顺便说一句,这个问题是否发生在每个浏览器?至于解决方案,您可以尝试完全覆盖submit事件,并确保提交按钮值正在传递。我不知道这是否会奏效,因为我不熟悉MVC-3和ASP。 – 2011-12-20 22:33:53
我不明白为什么您需要区分在文本字段中使用回车键并使用提交按钮。至少从客户端代码来看并不明显。如果服务器端处理程序在表单数据中需要特定的名称=值对,那么将其包含在隐藏字段中并省略提交按钮中的“name”属性是最安全的。 – 2011-12-20 23:21:09