1

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

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

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

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

谢谢您的帮助!

4

3 回答 3

3

简单的回答:不要回发!

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

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

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

这是我对其他问题整个过程的回答。

于 2012-11-09T00:36:39.850 回答
2

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

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

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

于 2012-11-09T00:38:17.213 回答
1

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

HiddenFieldID.Value 

请注意,隐藏字段没有 text 属性,而是 value 属性。

于 2012-11-09T03:39:05.800 回答