ASP.NET用户控件& AJAX

时间:2015-02-26 17:58:25

标签: asp.net ajax

我有这个ASP.NET用户控件(作为其渲染阶段的一部分)需要在客户端执行一些javascript。我使用ScriptManager.RegisterStartupScript来注册我想在响应到达客户端时执行的脚本。现在,在我的场景中,我的控件包含在Update面板中(更准确地说,它是使用Telerik RadAjaxManager进行调整的)。在同一页面上,我有第二个更新面板(再次更确切地说,第二个面板用第二个RadAjaxManager设置ajaxified)。当第二个面板引发部分回发时,我希望忽略来自我的控件的更改(包括任何发出的脚本)。事实并非如此令人沮丧,我无法确定该怎么办?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

IDEA#1:停止使用UpdatePanel。

ASP Webforms非常适合很多事情......部分页面呈现不是其中之一。虽然UpdatePanel在技术上执行“部分页面呈现”,但它也执行完整的回发。


相反,请使用此替代方案。 。

创建ASP Web API并重新控制页面加载过程。通过创建一个Web API控制器(它几乎只是您可以使用javascript调用的服务器上的一个函数),您可以传递给服务器特定信息,仅运行您正在执行的操作所需的功能(或功能),以及然后返回您需要在客户端上显示的确切数据。

调用服务器(即您的ASP Web API控制器)的相同javascript函数也将处理返回的响应,该响应可以使用始终简单易用的JSON格式轻松格式化。最后,你的javascript看起来像这样:

$('.show-kitten-button').click(function () { // this binds the click event whatever button begins the action.
    // then we'll store some values in our variables
    var kittenType = $('input.kitten-type').val(); // "calico" ...from asp textbox with a CssClass="kitten-type" attribute.
});

// function to make the call to the ASP Web API controller.
function getKittenPicture(kittenType) {
    $.ajax({ // jQuery's AJAX function works well
        type: "GET" // there are four types of requests: get, post, update, and delete. You can do most actions with get and post.
        , url: 'http://yourWebSite.com/api/kittens/' + kittenType // the URL that routes to your ASP Web API controller. This is specified in the global.asax file.
        , success: function (data) { // handle the data if the HTTP response indicates success
            if (data || false) { // if data exists
                var jsonData = JSON.parse(data); // parse it as JSON. This is assuming you are returning a serialized class object from C# or VB.NET. See below for more info on this.
                var kittenImageSrcUrl = jsonData.src; // grab the data from the JSON object.
                showKittenImage(kittenImageSrcUrl); // run the function to show the kitten image.
            }                
        }
        , error: function (data) { // handle the data if the HTTP response indicates an error.
            console.log('An error occurred while retrieving the cute kitten picture.');
            console.log('Error response: ', JSON.parse(data.responseJSON));
        }
        , complete: function (data) {
            // any code to perform once the success (or error) function is complete.
        }
    });
};

function showKittenImage(imgSrc) { // function to show cute kitten image
    $("#kittenImage").attr("src", "kittenImageSrcUrl"); // change the src attribute of the image to match the src URL we got back from the server.
};

更多信息

如果您尚未涉足API领域,那么您可以获得真正的待遇,因为它比使用UpdatePanels更容易,更有效,更有效。 UpdatePanels乍一看似乎很简单 - 制作一个并且它们给出动态页面内容的外观并不多 - 但是一旦你开始添加多个面板,插入启动脚本等等。 .t很快变得毛茸茸。下面是指向构建第一个API所需的所有内容的链接。我鼓励你检查一下......