我之前在这个网站上问了一个关于ajax客户端 - 服务器通信的问题。
我得到了很多帮助。但仍然无法弄清楚,所以重新问这个问题。
我试图从我的javascript页面发送存储在变量'mem_ID'中的值... Default.aspx到我的服务器端 - Default.aspx.cs页。
使用Javascript: -
<asp:Button ID="Button6" runat="server" BackColor="Silver"
onclientclick="store_memID()" style="margin-left: 20px" Text="Submit"
Width="102px" Font-Bold="True" Height="28px" />
<script type = "text/javascript" src ="http://code.jquery.com/jquery-1.9.0.min.js"> </script>
<script type = "text/javascript">
// Function to caputure client-input- Member_ID.
function store_memID() {
// 'TextBox3' is the server side ID. To get the client side ID we do the following:-
mem_ID = document.getElementById('<%=TextBox3.ClientID%>').value;
//return confirm('TimeLine is displayed for: ' + mem_ID);
ajax();
}
function ajax(){
$.ajax({
url: 'Default.aspx/MyMethod',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ memID: mem_ID }),
success: function (result) {
alert(result.d);
}
});
}
</script>
服务器端: -
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// Defining a page method.
[WebMethod]
public static string MyMethod(string mem_ID)
{
return string.Format("Thanks for calling me with id: " + mem_ID);
}
` more code here`....
但是,我仍然没有得到任何来自服务器的回复。我期待从服务器端返回“谢谢你用ID:.....来打电话给我”。有什么想法吗?
我在服务器端的响应行的MyMethod中添加了一个断点,并且没有命中。所以我假设这条线甚至没有被遍历。
我是Asp.net和Ajax的新手。并需要有关此主题的帮助。
答案 0 :(得分:1)
以下是我为您开始编写的完整示例:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<script type="text/c#" runat="server">
[WebMethod]
public static string MyMethod(string memId)
{
return string.Format("Thanks for calling me with id: " + memId);
}
</script>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="MyButton" runat="server" Text="Submit" />
<asp:TextBox ID="MyTextBox" runat="server" />
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script type="text/javascript">
$('#<%= MyButton.ClientID %>').click(function () {
var memId = $('#<%= MyTextBox.ClientID %>').val();
$.ajax({
url: '<%= ResolveUrl("~/Default.aspx/MyMethod") %>',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ memId: memId }),
success: function (result) {
alert(result.d);
}
});
return false;
});
</script>
</body>
</html>
为了演示的目的,它是一个自包含的WebForm,但你当然可以将标记与标记分开。
答案 1 :(得分:1)
<form id="form1" runat="server">
<div>
<asp:Button ID="Button6" runat="server" BackColor="Silver"
onclientclick="store_memID()" style="margin-left: 20px" Text="Submit"
Width="102px" Font-Bold="True" Height="28px" />
<script type = "text/javascript" src ="http://code.jquery.com/jquery-1.9.0.min.js"> </script>
<script type = "text/javascript">
// Function to caputure client-input- Member_ID.
function store_memID() {
var mem_ID;
// 'TextBox3' is the server side ID. To get the client side ID we do the following:-
mem_ID = document.getElementById('<%=TextBox3.ClientID%>').value;
//return confirm('TimeLine is displayed for: ' + mem_ID);
ajax(mem_ID);
}
function ajax(mem_ID) {
alert(mem_ID);
$.ajax({
url: 'Default.aspx/MyMethod',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ memID: mem_ID }),
success: function (result) {
alert(result.d);
}
});
}
</script>
<asp:TextBox id="TextBox3" runat="server"></asp:TextBox>
</div>
</form>
In Your Code Behind
[WebMethod]
public static string MyMethod(string memID)
{
return string.Format("Thanks for calling me with id: " + memID);
}
The method u have done all was right execpt,
The data passing from ajax should match the string Element declared in the Web-method.
答案 2 :(得分:0)
您将值作为JSON对象传递,对于为请求指定dataType并从服务器指定返回格式非常重要。
function ajax(){
$.ajax({
url: 'default.aspx/MyMethod',
type: 'POST',
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ memID: mem_ID }),
success: function (result) {
alert(result.d);
}
});
}
// Defining a page method.
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string MyMethod(string mem_ID)
{
return string.Format("Thanks for calling me with id: " + mem_ID);
}
然后,您需要添加ScriptManager和UpdatePanel来触发Ajax调用。 ScriptManager提供了从Aspx页面调用WebMethods的功能。使用我提供的上述代码。
<head runat="server">
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"/>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button6" runat="server" BackColor="Silver" OnClientClick="store_memID()"
Style="margin-left: 20px" Text="Submit" Width="102px" Font-Bold="True" Height="28px" />
<asp:TextBox ID="TextBox3" runat="server">Testing</asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
答案 3 :(得分:0)
通常我创建一个Ajax.aspx文件来处理大多数客户端 - 服务器ajax交互,就像在下面的例子中一样。然后此页面加载特定控件。我有时会在ajax请求中添加function
参数来访问控件中的特定方法或直接访问Ajax.aspx页面。