我有一个aspx页面,它有一个文本框和一个提交按钮。在文本框中输入数据并点击按钮显示一个listview控件,显示从数据库中恢复的数据.Listvew具有排序,分页,编辑功能。 对于其中的每一个,在服务器端触发相应的方法...例如: lv_sorting lv_Edit等 如果用户在文本框中键入数据并按Enter键,则在IE浏览器中将Page.IsPostback返回为false,但在Firefox中返回true(任何想法, 为什么会这样?)。
当回发为真时,会调用相应的方法,即。 lv_sorting等 但是因为在Page_Load事件中,当回发为假时,我只是从数据库中提取数据,页面不会在firefox浏览器中显示任何数据。
当在firefox浏览器中按下回车键时,我需要在listview中显示数据。 我尝试使用DefaultButton =“submitBtnId”并在文本框中按下回车键时强行调用按钮点击,但没有运气。
感谢。
仅供参考,这是在文本框中按下回车键时调用的javascript代码:
function clickButton(e, buttonid) {
var bt = document.getElementById(buttonid);
if (typeof bt == 'object') {
if (navigator.appName.indexOf("Netscape") > (-1)) {
if (e.keyCode == 13) {
if (bt && typeof (bt.click) == 'undefined') {
bt.click = addClickFunction1(bt)
}
}
}
if (navigator.appName.indexOf("Microsoft Internet Explorer") > (-1)) {
if (event.keyCode == 13) {
bt.click();
return false;
}
}
}
}
function addClickFunction1(bt) {
var result = true;
if (bt.onclick) result = bt.onclick();
if (typeof (result) == 'undefined' || result) {
eval(bt.href);
}
}
答案 0 :(得分:1)
您是否有任何试图处理回车键的Javascript代码?
当表单字段具有焦点时按Enter键时的默认行为是激活表单中的第一个按钮。这会将表单发布到服务器,自然会导致IsPostBack为真。
我不知道为什么IE在这种情况下不这样做,这就是为什么我想知道你是否有任何可能改变行为的Javascript。
当您第一次到达页面时,IsPostBack属性仅为false,例如,当您单击其他页面(或甚至同一页面)上的链接时,或使用来自其他页面的Response.Redirect(甚至相同)页)。当页面上的表单回发到服务器时,IsPostBack属性为true。
除非您确保始终发出GET请求(例如通过在浏览器中设置window.location.href)来更新页面,否则您不能依赖IsPostBack来告诉您何时需要加载数据。
列表视图使用ViewState的方式是,您可以使用一次数据加载它,并通过回发保留该数据。如果更改基础数据并希望在列表视图中显示该更改,则必须从中删除当前数据并使用新数据加载它。或者,为列表视图打开EnableViewState,并为每个回发加载新数据。
答案 1 :(得分:1)
按下Enter键时,Internet Explorer不提交按钮;其他浏览器呢。这意味着按钮的单击事件在这些情况下不会触发。值得庆幸的是,它是ASP.NET 2.0中的possible to set a default button。
一旦所有浏览器始终单击该按钮,您应该在按钮的单击事件触发时从数据库加载值,而不是在页面加载时加载。
答案 2 :(得分:0)
为什么不使用asp.net按钮控件,为点击添加一个事件处理程序,然后从事件处理程序填充Listview?