我试图在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)并生成通过事件提交的数据。
提前致谢。
编辑:我可以获得有关如何改进此问题的建议,而不是低估吗?
答案 0 :(得分:1)
但我试图从UserControl(ascx)这样做,所以我不确定 调用[WebMethod]会起作用。
UserControl中的ImageButton没有问题,但WebMethod方法需要在父.aspx中
使用OnClientClick调用调用WebMethod的JS函数。执行您需要的操作,然后通过返回true或false来确定是否允许OnClick。
OnClientClick="return JsFunctionThatCallsTheWebMethod();"
答案 1 :(得分:1)
$.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的回复