Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于向用户控件传递数据的ajax的非MVC替代方案_C#_Asp.net_Ajax_Postback - Fatal编程技术网

C# 用于向用户控件传递数据的ajax的非MVC替代方案

C# 用于向用户控件传递数据的ajax的非MVC替代方案,c#,asp.net,ajax,postback,C#,Asp.net,Ajax,Postback,我身陷困境 长话短说,我正在做一个大项目,在学习ASP.NET、C#以及我所做的一切 我的项目的元素由用户控件组成。我的想法是,我可以创建许多用户控件,每个控件为我正在构建的项目的“组件”执行一个功能。到目前为止,我一直在使用客户端脚本在每个用户控件上回发对代码的ajax调用。AJAX工作得很好,因为它允许我将数据(我需要从客户端)传递到我的用户控件,然后我可以返回一些东西来执行操作 我一直在使用一种生成querystring的方法来创建回调“action”,以便确定在将回发发送到代码后端时,需

我身陷困境

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

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

我一直在使用一种生成querystring的方法来创建回调“action”,以便确定在将回发发送到代码后端时,需要用什么方法来处理什么数据

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

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

我也尝试使用UpdatePanel控件来最小化回发到整个页面的次数,但几乎没有成功

我可以使用什么作为替代方案?我觉得我已经没有选择了,或者缺少了一些基本的东西


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

您可以在aspx页面上创建静态方法,并用[WebMethod]标记。然后可以使用jqueryajax从用户控件标记调用该方法。看看这个

看看:

基于此:

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

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

当然不是,避免这种情况的唯一方法是使用PageMethods或创建脚本服务来处理AJAX请求(具有
ScriptService属性的Web服务或WCF REST服务

请注意,即使您使用邪恶的
UpdatePanel
,也绝对会执行所有页面生命周期,这意味着在每次发布中都必须发送整个页面视图状态,使用
UpdatePanel
控件的唯一好处是获得部分呈现,即,服务器端的性能根本没有改变


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

[WebMethod]
是您在方法上添加的一个属性,该属性允许在Web服务中使用它。标记有
WebMethod
属性的方法可以在没有(MVC)控制器的情况下使用;它与MVC没有什么特别的关系。使用UpdatePanel控件可能会起作用。您是否可以发布一些代码,以便我们看到您迄今为止所做的工作?虽然这是一个解决方案,但它对我的情况不起作用。我正在使用这个项目,所有的aspx页面都是在请求页面时动态创建的。我唯一的选择是用户控件。我正在迁移所有控件以使用WebService。谢谢你的建议