用于将数据传递给用户控件的ajax的非MVC替代方法

时间:2012-07-17 21:15:53

标签: c# asp.net ajax postback

我陷入了困境。

长话短说,我正在开展一个大项目,我正在学习ASP.NET,C#,随时随地学习。

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

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

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

我做了很多研究,并且已经看到了各种方法来解决这个问题,其中最好的是[WebMethod]和控制器。但是我正在研究的项目是NON-MVC。

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

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

TL; DR - 我需要一种非MVC方法将数据传递给用户控件,以区分多个控件。无法使用pagemethods(或页面)。手动ajax调用无效。无法承担完整的回发

2 个答案:

答案 0 :(得分:1)

看看:

updatepanel vs page methods

基于此:

  

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

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

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

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

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

答案 1 :(得分:0)

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