如何从javascript函数中调用代码隐藏方法
本文关键字:调用 代码 隐藏 方法 函数 javascript | 更新日期: 2023-09-27 18:29:25
我有一个javascript函数,用于aspx页面中的HTML img单击事件。和一个服务器方法在其代码页后面。现在,我想只在用户单击HTML img时,才从javascript函数调用服务器方法,而不带任何参数。
C#代码隐藏方法:
[WebMethod]
public void PopUpClick(object sender, EventArgs e)
{
//Something;
}
JavaScriptMethod:
$(document).ready(function () {
$('.clickme').click(function () {
PageMethods.PopUpClick();
});
});
我还在主页中添加了:<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" EnablePageMethods="true" />
它不起作用。当我在Chrome上调试这个Javascript函数时我看到一个错误:未捕获引用错误:未定义PageMethods。
.aspx
<div>
<p>Say bye-bey to Postbacks.</p>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<asp:TextBox ID="txtname" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="txtaddress" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="HandleIT(); return false;" />
</div>
JavaScript
<script type="text/javascript">
function HandleIT() {
var name = document.getElementById('<%=txtname.ClientID %>').value;
var address = document.getElementById('<%=txtaddress.ClientID %>').value;
PageMethods.ProcessIT(name, address, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Something wrong.');
}
}
</script>
C#
[WebMethod]
public static string ProcessIT(string name, string address)
{
string result = "Welcome Mr. " + name + ". Your address is '" + address + "'.";
return result;
}
定义的WebMethods必须是"static"。
以下对WebMethod"GetAllRegions"的ajax调用运行良好,前提是WebMethod被定义为静态!!
$.ajax({
type: "POST",
url: 'GenerateEAInHtml.aspx/GetAllRegions',
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
});
WebMethod是这样定义的:
[WebMethod]
public static List<Region> GetAllRegions()
{
/* Your Code goes here */
return regions;
}
您可能还想使用此Ajax Post通过传递数据参数将JSON数据传递给WebMethod!!这应该会有所帮助。
函数sendData(偏移量){$.ajax({类型:"POST",网址:"abc.aspx/xyz",contentType:"application/json;charset=utf-8",dataType:"json"});}
服务器端:添加导入System.Web.Script.Serialization
WebMethod(enableSession:=True)_公共共享函数xyz()为字符串您的代码在这里结束函数
在web.config->system.webServer 中添加模块
->system.webServer>->模块>->add name="ScriptModule"preCondition="managedHandler"type="System.Web.Handlers.ScriptModule,System.Web.Extensions,Version=3.5.0.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>->/模块>->/system.webServer>
后端C#代码与前端JavaScript代码是分开的。JS运行在客户端,C#运行在服务器端。为了让前端代码触发后端函数,您可能需要您的函数执行表单回发,或者使用Ajax(或等效工具)来调用该pages函数。
试试这个
[WebMethod]
public static void PopUpClick(object sender, EventArgs e)
{
//Something;
}
使用ImageButton。处理程序不需要标记为[WebMethod]
<asp:ImageButton runat="server" ID="btnPopUp" ImageUrl="img.png" OnClick="PopUpClick" />
为什么要直接使用img?
顶部有一行表示取消注释以通过JavaScript调用它。
取消注释。
然后在你的方法中添加一个[ScriptMethod]
,如下所示:
[WebMethod]
[ScriptMethod]
public void PopUpClick(object sender, EventArgs e)
{
// Something;
}
然后,您应该能够从PageMethods
对象调用它。
然而,我刚刚做了一些研究,似乎您可能需要将使用PageMethods
的代码放在ScriptManager
的末尾/之后,因为您可能试图在PageMethods
在JavaScript中声明之前使用它。或者,如果您使用的是jQuery,那么您可以在ready
事件中执行它,这样您就知道页面和所有内容都已加载。我认为这可能是根本原因。
必须将web方法声明为静态和公共方法。
尽管您不能直接访问页面,但您可以将所需内容从客户端代码中的调用传递到web方法中,或者将所需信息存储在会话中或可从静态web方法访问的类似状态存储机制中。
这可能需要重新思考你想用它做什么。