Webkit浏览器自动完成功能不适用于ASP UpdatePanel中的文本框

时间:2011-05-02 15:21:56

标签: asp.net

我有几个页面,其中包含带有asp文本框的UpdatePanels并在里面提交按钮。但是,它们都没有触发Chrome或Safari的自动填充/自动填充功能,这些功能会提示您之前输入的内容。

它似乎与常规回发工作正常,但在UpdatePanels内部我似乎无法使其工作。

在我看来,这应该是一个已知的问题,但我找不到任何有关它的信息。

4 个答案:

答案 0 :(得分:1)

当有完整的帖子/提交事件时,Chrome似乎会记住这些输入值。以下是关于同一问题的另外两个问题。

browser autocomplete/saved form not work in ajax requestHow to store to browser auto-complete/auto-fill when using AJAX calls instead of standard form submit

我尝试使用获取操作和“NoContent”状态代码伪造提交到另一个页面,以便chrome记住这些值。也没有运气。如果它能够工作,那么它仍然不是一个好方法。

答案 1 :(得分:0)

您是否尝试过更改UpdateMode属性?

答案 2 :(得分:0)

我认为您遇到了 ASP.NET UpdatePanel控件和 jQuery 的经典问题。

问题如下:

jQuery 代码(在你的情况下它是自动完成的,但它可以是任何东西)在页面加载时工作正常,但它在部分回发后停止工作。如果是这种情况,那么在使用带有UpdatePanel控件的 jQuery 时,您需要了解一些事项。

首先,$(document).ready中定义的所有事件绑定在第一次部分回发后停止工作(我假设你的按钮点击导致部分回发)。这就是 ASP.NET 的工作方式。那么你如何解决它?

嗯,有几种方法可以解决这个问题。典型的建议是将$(document).ready替换为 ASP.NET AJAX自己的pageLoad事件。这可能会解决一个问题,但它很可能会导致更多问题,因为现在您将在每个部分回发上绑定事件,从而导致在单个事件上重复执行事件处理程序。在执行任何绑定之前,您可以通过为选择器调用unbind来解决一些问题。对于简单的事件绑定,您可以继续将$(document).ready与实时函数一起使用(而不是单击,悬停等)。

我没有在UpdatePanel中使用 jQuery 插件,所以我不能确定你需要做什么,但是一旦你理解了发生了什么,就不难找到正确的方法。要了解有关此问题的更多信息和可能的解决方案,请阅读Dave Ward的文章$(document).ready() and pageLoad()不一样! (该文章包括几个例子)。

希望这可能会有所帮助!

答案 3 :(得分:0)

我有OP确定的同一问题。但是,原因与此处的其他答案不同。

我的问题是,<asp:LinkButton runat="server" OnClick="codebehind_function" PostBackUrl="#">Click here</asp:LinkButton>触发的回发未被浏览器提取为表单。

示例:

var result = [] var promise = [] for (i=0;i < array.length;i++) { _url = "http://example.com" var req = $.ajax( { type: "GET", url: _url, success: function(request) { result.push(request) } , error: function(request) { result.push("ERROR BROTHA") } }); promise.push(req) } $.when(promise).done(function(){ console.log(result); });

添加 server.use('/api/data', require('./api/data')); server.get('*', async (req, res, next) => { await Router.dispatch({ path: req.path, query: req.query, context }, (state, component) => { <div> {component} </div> ); data.css = css.join(''); }); }); 属性修复了它!

router.get('/', auth.isAuthenticated, async (req, res, next) => { res.status(200).send({result: 'working!'}); });