【问题标题】:execute code behind method every time DIV loads (ASP, ascx, ascx.cs)每次 DIV 加载时执行方法后面的代码(ASP、ascx、ascx.cs)
【发布时间】:2013-08-01 20:39:14
【问题描述】:

这个想法是,这个 div 包含来自客户的报价,该报价是通过 get random 函数从服务器检索的,并且每隔几秒钟运行一个 jQuery 会淡出该报价并显示另一个报价。

这是我的 .ascx 中的 Div 代码:

< div class="testimonial" ID="Fader" onload="runTestimonial">

<q>"<asp:Literal runat="server" ID="Quote"></asp:Literal>"</q>

</div>

代码隐藏 (.ascx.cs):

protected void runTestimonial(object sender, EventArgs e)
{ --lots 'o code--

Partnership partnership = Partnership.GetRandomTestimonial(cmPage.CMPageId);
            if (partnership != null)
            {
                Quote.Text = partnership.Testimonial;
                Visible = true;
            }
}

我正在使用这个 jQuery 代码:

setInterval(
    (function () {
        $('#Fader').fadeOut('slow', function () {
            setTimeout(function () { $('#Fader').load().fadeIn('slow'); }, 300);
        });
    })
    , (200))

jquery 应该没问题。它链接到 Div 的 Fader ID 并进行淡入淡出和加载。

最初,div 使用相同结构的 Page_Load 方法生成了报价,这很有效。现在的变化是我需要在需要时调用它,而不是在 Page_Load 上,而是在 jQuery 刷新上。

到目前为止,我让 div 刷新进出,但它是空白的(如果我将其恢复为 on Page_Load 方法,则相同的引号会进出)。它没有到达 ASP 行或没有执行它。我根本无法让 runTestimonial 像 Page_Load 那样工作,可能是因为我不知道如何调用它。

我真的不知道如何做 C#、jQuery ASP 或代码背后的东西。请帮忙!

【问题讨论】:

    标签: asp.net css ascx


    【解决方案1】:

    这些是您需要使用 jQuery 和 WebMethod 执行的步骤:

    1) 您将 runTestimonial() 函数更改为 WebMethod,它将返回一个字符串(随机推荐)。所以你的函数的签名看起来像这样:

    [WebMethod]
    public static string runTestimonial()
    {
        return randomTestimonial; //include your code
    }
    

    2) 在文件头部添加 jQuery 库。

    <script src="http://code.jquery.com/jquery-latest.js"></script>
    

    3) 创建一个对您的网络方法进行 ajax 调用的函数。

    function getTestimonial()
    {
       $.ajax({
         type: "POST",
         url: "Default.aspx/runTestimonial",
         data: "{}",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function(msg) {
           $("#Fader").html(msg); //msg contains the response from the server, this appends it to the div
         }
       });
    }
    

    4) 标记中的 div 将不是服务器控件,因此请删除 onload。所以它看起来像这样:

    <div class="testimonial" ID="Fader"></div>
    

    5) 我们快完成了,只需确保在 setInterval 中调用 getTestimonial() 函数即可。

    [WebMethod] 属性位于 System.Web.Services 库中,因此请确保将其包含在页面顶部:

    using System.Web.Services;
    

    就是这样,应该可以了。

    【讨论】:

    • :哦,工作量很大,谢谢先生。我开始玩它。到目前为止,我只是很难将所有内容都放在 webmethod 中而不会出错。明天我可能需要继续进行故障排除,但我会告诉你进展如何!
    • 我一直在玩它,但仍然有问题。我想知道它是否与网址有关?我现在正在处理的页面是 ascx;基本上这只是任何继承主人的页面都会显示的报价金块。
    • 哦,我不认为它应该与 URL 有任何关系,WebMethod 也应该可以从那里访问。但也许尝试在同一页面中执行此操作,看看会发生什么?
    • 谢谢 :) 它确实涉及一些 ajax 和其他一些技巧;这个网站最终变得如此复杂,以至于涉及到很多事情的改变。我不得不请一位随叫随到的高级开发人员来帮助我。我希望(主要)自己做这件事并且很酷,但它没有发生,哈哈。感谢您的时间。将此标记为最佳答案
    【解决方案2】:

    简单来说,C#是服务器端,所以客户端浏览器上不存在runTestimonial方法。您需要创建一个 javascript 函数,该函数使用 jQuery 通过 ajax 请求调用服务器。我建议查看一些关于 jQuery/ajax/ASP.Net 的教程。似乎您缺少一些基础知识。希望对您有所帮助!

    【讨论】:

    • 步骤很多。几天来,我一直在盯着各种方法。问题之一是我应该解决这个问题,但我不知道这些语言的基础知识,所以很难同时建立 3 个不同的外国基础,哈哈。我希望我至少知道其中一个。 Ajax 看起来很复杂,嗯。你认为我应该首先看什么?
    • 您可能正在研究低级 ajax,如果您正在使用 jQuery 进行 ajax,这很容易:$.ajax({})
    • 我正在看它。我不知道该怎么处理它。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多