在PostBack之前从jQuery调用方法

时间:2015-04-28 13:34:25

标签: javascript c# jquery asp.net sitefinity

我试图在PostBack发生之前从jQuery调用C#方法。 我见过一些涉及Ajax的解决方案,但是我试图从UserControl(ascx)中做到这一点,所以我不确定调用[WebMethod]是否可行。

以下是按钮和事件的.ascx标记和.cs代码:

<asp:ImageButton ID="inBottomButton" CssClass="img" title="In Bottom" runat="server" ImageUrl="~/Widgets/QuoteModule/Resources/images/In-Bottom.png" OnClick="inBottomButton_Click" AlternateText="In Bottom"/>

protected void inBottomButton_Click(object sender, ImageClickEventArgs e)
    {
        QuoteRequest multiQuote = new QuoteRequest { WindPosition = WindPosistions.InBottom };
        QuoteResponse quote = ValidateMultiQuoteRequest(multiQuote);
        ProcessMultiQuoteRequest(quote);
    }

如果有人可以帮我找出一种从jQuery调用click事件的方法,我将不胜感激。我知道我可以阻止PostBack使用(return false;)或preventDefault(e);

而且我也知道我可以在PageLoad上检查(IsPostBack),但我已经在做那个加载数据了,在这种情况下这对我没有帮助。

用户将单击ImageButton(inBottomButton)并生成通过事件提交的数据。

提前致谢。

编辑:我可以获得有关如何改进此问题的建议,而不是低估吗?

3 个答案:

答案 0 :(得分:1)

  

但我试图从UserControl(ascx)这样做,所以我不确定   调用[WebMethod]会起作用。

UserControl中的ImageButton没有问题,但WebMethod方法需要在父.aspx中

使用OnClientClick调用调用WebMethod的JS函数。执行您需要的操作,然后通过返回true或false来确定是否允许OnClick。

 OnClientClick="return JsFunctionThatCallsTheWebMethod();"

答案 1 :(得分:1)

嗯,你有能力创建一个单独的页面来保存WebMethod,然后从你的JS中调用它吗?

 $.ajax({
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            type: 'POST',
            url: '/SomeOtherPage.aspx/YourWebMethod',
            data: { s: $('#element').val() },
            success: function (data) {                    
                return true;
            },
            error: function (d) {
                //alert(d.error);
                return false;
            }
        });

答案 2 :(得分:1)

您可以在sitefinity中将任何标准ascx用作窗口小部件。 ASP.NET生命周期仍然在sitefinity中正常工作。如果您想要处理点击服务器端,您可以像在标准.NET网站解决方案中那样进行操作。

webmethod或标准ServerSide点击处理程序在这种情况下可以正常工作。 WebMethod您可能必须在BootStrapper中添加自定义路由。

以下是我刚刚撰写的关于添加一个更容易使用的webapicontroller的回复

Determining url for Ajax WebMethod (in Sitefinity)