0

我陷入了巨大的困境。

长话短说,我正在从事一个大项目,并且正在学习 ASP.NET、C#,以及我所从事的一切。

我项目的元素由用户控件组成。我的思路是我可以创建许多用户控件,每个控件都为我正在构建的项目的“组件”执行一个功能。到目前为止,我一直在使用客户端脚本将 ajax 调用回发到每个用户控件上的代码隐藏。AJAX 运行良好,因为它允许我将数据(我需要来自客户端的数据)传递给我的用户控件,然后我可以返回一些内容以执行操作。

我一直在使用一种生成查询字符串的方法来创建回调“动作”,以确定在将回发发送到代码隐藏端时需要什么方法来处理什么数据。

我现在的问题是我需要在一个页面上开始使用许多用户控件——所以现在每当任何控件执行回发时,所有控件都会经历页面加载。我以为我的回调解决方案可以解决这个问题,但事实并非如此。特别是当我将自定义注册控件放入另一个用户控件时。

我已经进行了大量研究,并看到了各种解决此问题的方法,其中最好的方法是[WebMethod]控制器。然而,我正在从事的项目是 NON-MVC。

我还尝试使用 UpdatePanel 控件来最小化对整个页面的回发,但收效甚微。

我可以使用什么作为替代品?我觉得我的选择已经不多了,或者这里缺少一些非常基本的东西。

TL;DR -- 我需要一种非 MVC 方法将数据传递给可以区分多个控件的用户控件。不能使用页面方法(或页面)。手动 ajax 调用不起作用。无法进行完整的回发

4

2 回答 2

1

看一眼:

updatepanel 与页面方法

基于此:

我现在的问题是我需要在一个页面上开始使用许多用户控件——所以现在每当任何控件执行回发时,所有控件都会经历页面加载。

这听起来很简单,但您是否尝试if(!this.IsPostBack)在加载事件中使用?

不,避免这种情况的唯一方法是使用PageMethods或创建脚本服务来处理 AJAX 请求(使用ScriptService attribute or WCF REST services.

请注意,即使你使用 evil UpdatePanel,也绝对会执行所有页面生命周期,这意味着必须在每个帖子中发送整个页面视图UpdatePanel状态,使用控件的唯一好处是你可以获得部分渲染,就是这样,服务器端的性能根本没有改变。

所以你可以使用PageMethodsScript Services。但是有一个问题,如果您开始使用它们,您会注意到一个令人难以置信的性能变化,您的应用程序将更加响应(RIA 应用程序),但问题是您将无法使用 ASP.Net 服务器的好处GridView,等控件Repeater。换句话说,您需要更改大多数视图控件(这是使用 MVC 应用程序时遵循的方法)

于 2012-07-17T23:37:39.927 回答
0

您可以在您的 aspx 页面上创建静态方法并用 [WebMethod] 标记它。然后,您可以使用用户用户控件标记中的 jQuery ajax 调用该方法。看看这个博客

于 2012-07-17T21:55:45.643 回答