ajax调用更新更改的方法

时间:2014-12-10 06:53:16

标签: javascript c# jquery asp.net ajax

我想通过ajax调用在webform中调用web方法函数,该调用更新名为“First”的分区中的文本框值,而不刷新整个页面,只覆盖那些文本框或分区。我的asp.net代码包含带有jQuery的ajax,如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="test_with_ajax.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="First" style="margin-left:45%">

    <asp:TextBox ID="TextBoxName" runat="server"></asp:TextBox>
    <br />
    <br />
    <asp:TextBox ID="TextBoxID" runat="server"></asp:TextBox>
   </div>
    <br />
  <div id="Second" style="margin-left:50%">
        <asp:Button ID="ShowButton" runat="server" Text="Show"/>
  </div>

    <asp:ScriptManager ID="ScriptManager" runat="server" EnableCdn="true" AjaxFrameworkMode="Disabled">
    <Scripts>
        <asp:ScriptReference Path="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"/>
    </Scripts>
    </asp:ScriptManager>

    <script>
        var pageurl = '<%=ResolveUrl("~/WebForm1.aspx/Show()") %>';
        $('document').ready
        (
            function () {
                $("#ShowButton").click
                (
                    function (e) {
                        e.preventDefault();
                        $.ajax
                        (
                          {
                              type: 'POST',
                              URL: pageurl,
                              async: "true",
                              success: function (x) {
                                  alert("Done Successfully with " + x.msg);
                              },
                              error: function (e) { alert("The call got failed due to " + e.msg); }
                          }
                        );
                        //$("#First").html("").append(data);
                    }
                );
            }
        )
    </script>
</form>
</body>
</html>

我的webform类包含am调用的函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace test_with_ajax
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        [WebMethod]
        public static void Show()
        {
             WebForm1 t = new WebForm1();
             t.TextBoxName.Text = "Sarthak";
             t.TextBoxID.Text = "66";
        }
    }
}

但我没有得到我想要的预期结果。它显示了ajax调用成功部分的警告消息,但根本不更新文本框。

5 个答案:

答案 0 :(得分:0)

  

这不是更新文本框的正确方法,因为您正在创建webform的新对象并将值分配给文本框。您应该从webmethod返回数据并在javascript代码中更新文本框。还要在ajax调用中添加数据类型。

试试这个

[WebMethod]
public static string Show()
{
 return "Hello world";
}

比你在ajax成功写得像这样

success: function (x) {
alert("Done Successfully with " + x.msg);
$('#TextBoxName').val(x.d);
},

这只是一个字符串,你可以返回数组或列表或obejct你需要的任何东西。

答案 1 :(得分:0)

试试这个,在函数后面的代码中修复断点,如果它命中,然后将类型更改为字符串并返回您想要的内容,然后在客户端完成您的更改

   <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div id="First" style="margin-left:45%">

    <asp:TextBox ID="TextBoxName" runat="server"></asp:TextBox>
    <br />
    <br />
    <asp:TextBox ID="TextBoxID" runat="server"></asp:TextBox>
   </div>
    <br />
  <div id="Second" style="margin-left:50%">
        <asp:Button ID="ShowButton" runat="server" Text="Show"/>
  </div>

   <script type="text/javascript" src="jquery.js"></script> <!--add your jquery source path in src --> 


     <script type="text/javascript">
var sample="hai"


        $('document').ready
        (
            function () {
                $("#ShowButton").click
                (
                    function (e) {
                        e.preventDefault();
                        $.ajax({
                        type: "POST",
                        url: "WebForm1.aspx/Show",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg)
                        {
                           //$("#TextBoxName").value(msg.d);
                        }
                    });
                     //$("#First").html("").append(data);
                    }
                );
            }

    </script>
</form>
</body>
</html>

背后的代码

[WebMethod]
    public static string Show(string sample)
    {
       return sample;
    }

答案 2 :(得分:0)

类型:“GET” - 是必需的。 DataType:“json”应该没问题。 Webmethod需要返回一些可序列化的数据,在这种情况下可以返回字符串。在Inside Success函数中,您可以使用Jquery和$(“#TextBoxName”)。val('someval');

处理这类错误的最佳方法是使用Firefox并安装Firebug。在Firebug中,使用“脚本”选项卡,您可以在其中查看正在发生的事情以及从webMethod获取的数据。

答案 3 :(得分:0)

&#13;
&#13;
Imports System
Imports System.Web
Imports System.Web.Services
Partial Class _Default
    Inherits System.Web.UI.Page
    <WebMethod()> _
    Public Shared Function isDuplicate() As String
        Return "Hello text"
    End Function

End Class
&#13;
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="jquery-1.9.1.js"></script>
    <script type="text/javascript">
        function getData() {
            $.ajax({
                type: 'POST',
                url: 'Default.aspx/isDuplicate',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    alert("Done Successfully with " + data.d);
                    $("#TextBox1").val(data.d);
                    $("#TextBox2").val(data.d);
                    $("#TextBox3").val(data.d);

                }
            }
                       );
        }

    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:ScriptManager  runat="server" ID="scr"></asp:ScriptManager>
            <asp:UpdatePanel runat="server" ID="upd"></asp:UpdatePanel>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
            <asp:Label runat="server" ID="lbl"></asp:Label>
            <asp:Button runat="server" ID="btn" Text="Click" OnClientClick="getData(); return false;" />
        </div>
    </form>
</body>
</html>
&#13;
&#13;
&#13;

尝试这样的事情。

答案 4 :(得分:0)

由于没有回发,服务器端代码(在本例中为Show方法)无法通过Jquery Ajax呈现任何内容。

尝试使用webmethod将JSON数据返回给客户端,并使用相同的数据更新$ .ajax()的成功回调函数中的texbox;

试试这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace test_with_ajax
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        [WebMethod]
        public static object Show()
        {
             object result = new 
        {
            TextboxName = "Sarthak";
            TextBoxID = "66";
        }
        return result;
        }
    }
}

你的Ajax调用应该是:

<script>
    var pageurl = '<%=ResolveUrl("~/WebForm1.aspx/Show()") %>';
    $('document').ready
    (
        function () {
            $("#ShowButton").click
            (
                function (e) {
                    e.preventDefault();
                    $.ajax
                    (
                      {
                          type: 'POST',
                          URL: pageurl,
                          async: "true",
                          success: function (x) {
                              var data = JSON.parse(x.d);
                              $('#TextboxName').val(data.TextboxName);
                              $('#TextboxID').val(data.TextboxID);
                          },
                          error: function (e) { alert("The call got failed due to " + e.msg); }
                      }
                    );

                }
            );
        }
    )
</script>