【问题标题】:How to work around ASP.NET Webforms limitations when using jQuery?使用 jQuery 时如何解决 ASP.NET Webforms 限制?
【发布时间】:2012-10-29 07:33:55
【问题描述】:

任何将 jQuery 与 .NET Web 应用程序一起使用的人很可能会遇到问题,即通过 jQuery 在客户端上所做的更改在回发期间不一定会持续到 Web 服务器(因为视图状态、安全性等) .

我的场景: 我有一个带有两个不同 ASP.NET 下拉列表的 GridView。其中一个下拉列表在 page_load 期间填充,而另一个则留空。留空的内容是这样填充的:当用户在第一个下拉列表中选择一个项目时,它会触发一个事件,该事件使用 jQuery ajax 从 Web 服务器检索数据,然后将该数据返回给客户端并填充到第二个下拉菜单。这一切都是基本的,并且易于启动。我喜欢它。

但是,我不喜欢的是,当用户在第二个下拉列表中选择一个项目(在它被 jQuery ajax 调用填充之后)并单击“保存”按钮(这会导致回发)然后下拉选择在服务器端为空(这实际上意味着服务器不知道下拉列表中有项目或用户在其中选择了项目)。显然,这与视图状态中的下拉列表为空这一事实有关,我完全理解这背后的原因,但尝试将 jQuery 与 .NET 混合使用让我非常沮丧。

所以我的问题是:如何使用 jquery 填充 ASP.NET 下拉列表并通过回发保持其中的项目?

感谢您的帮助!

【问题讨论】:

  • 如果您只需要选定的值,那么无论 ASP.NET 管道是否能够重新创建由客户端动态填充的控件的子项,它都可以访问Request.Form KVP 集合中的表单变量。如果客户端需要重新加载页面,问题就会出现。在这种情况下,可以使用 Christophe 的回答来促进这一点。

标签: jquery asp.net ajax webforms postback


【解决方案1】:

简单的回答:不要回发!

$.post 用于处理程序 (.ashx) 或任何其他页面并将内容保存在那里...

还想回发?没问题,因为您已经有了第二个项目id,只需在处理帖子时预先填充第一个和第二个下拉列表。

但我永远不会回发...我会简单地使用$.ajax 或简单的形式$.post 来发布我的数据,这使我有两个不同的页面,一个用于处理布局,另一个用于处理数据.. . 这在 ASP.NET MVC 中很常见,但是因为 WebForms 的工作方式,你需要像这样区分它。

这是我在其他问题中的answer for the entire process

【讨论】:

  • 这可能是最好的解决方案,但它需要重写,不幸的是我没有那种时间。实际上,我确实经常使用 $.ajax 来保存 jquery 对话框,但我从未尝试将它连接到可以完成整个网页的保存按钮。我将不得不更多地弄乱它,看看我是否喜欢这种方法。
【解决方案2】:

正如您所说,“服务器不知道下拉菜单中有项目”。

我的建议:使用简单的输入字段而不是第二个下拉菜单,因为从服务器的角度来看,您真正在做的是发布一个文本字符串。您可以隐藏该字段,并将其与用作用户界面的纯客户端下拉菜单同步。

为了记录,这就是某些选择元素在 SharePoint 上的工作方式。

【讨论】:

    【解决方案3】:

    我以前遇到过这个问题。作为一种解决方法,我在第二个下拉列表旁边放置了一个 HiddenField 控件,并使用与第二个下拉列表相同的值填充该隐藏字段。 在后面的代码中,您可以像这样访问 HiddenField 值:

    HiddenFieldID.Value 
    

    注意隐藏字段没有文本属性,而是值属性。

    【讨论】:

    • 这是最简单的解决方案。感谢您的帮助。
    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多