在 PostBack 之前从 jQuery 调用方法
Call method from jQuery before PostBack
我试图在 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 调用点击事件的方法,我将不胜感激。我知道我可以使用 (return false;) 或 preventDefault(e);
来阻止 PostBack
而且我也知道我可以在 PageLoad 上检查 (IsPostBack),但我已经在加载数据了,在这种情况下这对我没有帮助。
用户将单击 ImageButton (inBottomButton) 并生成通过事件提交的数据。
提前致谢。
编辑:我可以得到关于如何改进这个问题的建议,而不是投反对票吗?
but I am trying to do this from a UserControl (ascx), so I am not sure
that calling a [WebMethod] would work.
UserControl 中的 ImageButton 没问题,但 WebMethod 方法需要在父 .aspx 中
使用 OnClientClick 调用调用 WebMethod 的 JS func。执行您需要的操作,然后通过返回 true 或 false 来确定是否要允许 OnClick。
OnClientClick="return JsFunctionThatCallsTheWebMethod();"
嗯,你有能力创建一个单独的页面来保存 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;
}
});
您可以使用任何标准的 ascx 作为 sitefinity 中的小部件。 ASP.NET 生命周期在 sitefinity 中仍然正常工作。如果您想处理点击服务器端,您可以采用与标准 .NET 网站解决方案相同的方式。
Web 方法或标准服务器端点击处理程序在这种情况下可以正常工作。您可能需要在 BootStrapper 中添加自定义路由的 WebMethod。
这是我刚刚写的关于添加一个更容易工作的 webapicontroller 的回复
我试图在 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 调用点击事件的方法,我将不胜感激。我知道我可以使用 (return false;) 或 preventDefault(e);
来阻止 PostBack而且我也知道我可以在 PageLoad 上检查 (IsPostBack),但我已经在加载数据了,在这种情况下这对我没有帮助。
用户将单击 ImageButton (inBottomButton) 并生成通过事件提交的数据。
提前致谢。
编辑:我可以得到关于如何改进这个问题的建议,而不是投反对票吗?
but I am trying to do this from a UserControl (ascx), so I am not sure that calling a [WebMethod] would work.
UserControl 中的 ImageButton 没问题,但 WebMethod 方法需要在父 .aspx 中
使用 OnClientClick 调用调用 WebMethod 的 JS func。执行您需要的操作,然后通过返回 true 或 false 来确定是否要允许 OnClick。
OnClientClick="return JsFunctionThatCallsTheWebMethod();"
嗯,你有能力创建一个单独的页面来保存 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;
}
});
您可以使用任何标准的 ascx 作为 sitefinity 中的小部件。 ASP.NET 生命周期在 sitefinity 中仍然正常工作。如果您想处理点击服务器端,您可以采用与标准 .NET 网站解决方案相同的方式。
Web 方法或标准服务器端点击处理程序在这种情况下可以正常工作。您可能需要在 BootStrapper 中添加自定义路由的 WebMethod。
这是我刚刚写的关于添加一个更容易工作的 webapicontroller 的回复