在asp上使用Ajax Javascript调用c#函数:按钮点击,不工作

本文关键字:按钮 工作 函数 asp Ajax 调用 Javascript | 更新日期: 2023-09-27 18:05:14

我使用下面的代码来检查,如果我在Tetxbox中输入的值已经存在于数据库中,那么显示一个警报"值已经存在"。为此,我在asp上使用Ajax Javascript:按钮("保存")单击:

Javascript:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://cdn.jsdelivr.net/json2/0.1/json2.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("[id*=btnBar]").bind("click", function () {
                alert("helloooo");
                var chk = {};
                chk.requestID = $("[id*=lblGuidId]").text();
                alert(chk.requestID);
                chk.barCode = $("[id*=txtBar]").val();
                alert(chk.barCode);
                $.ajax({
                    type: 'POST',
                    url: "Demo.aspx/SaveUser",
                    data: '{chk: ' + JSON.stringify(chk) + '}',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: function (data) {
                    var val = data.isUserInserted;
                    alert(val);
                    if (val == true) {
                        alert("Barcode No. alredy exist");
                        window.location.reload();
                    }
                    else {
                        alert("Barcode No. does not exist");
                    }
                },
                error: function (data) {
                    alert("error" + data);
                },
                });
                return false;
                alert("End click");
            });
        });       
    </script>

HTML代码:

<asp:Label ID="lblGuidId" runat="server" Text='<%# Bind("RequestID") %>'></asp:Label>
<asp:TextBox ID="txtBarcodeNumber" runat="server" MaxLength="11" Width="230px" Text='<%# Bind("BarcodeNo") %>' Display="None" OnTextChanged="TextChanged" AutoPostBack="true"></asp:TextBox>
<asp:Button ID="btnBar" runat="server" Text="Save"/>
c#代码:

public class Check
{
    public Guid? requestID { get; set; }
    public string barCode { get; set; }
}
[WebMethod]
[ScriptMethod]
public static bool SaveUser(Check chk)
{
    bool isUserInserted = false;
    string strcon = ConfigurationManager.ConnectionStrings["MasterDB"].ConnectionString;
    SqlConnection con = new SqlConnection(strcon);
    using (SqlCommand cmd = new SqlCommand("Invoice.usp_tbl_Request_Select_CheckDuplicateBarcode_Test", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@RequestID", chk.requestID);
        cmd.Parameters.AddWithValue("@BarcodeNo", chk.barCode);
        cmd.Connection = con;
        con.Open();
        isUserInserted = Convert.ToBoolean(cmd.ExecuteScalar());
        con.Close();
    }
    return isUserInserted;
}

但是每次进入else时,如果数据库中存在数据,那么它也会进入else部分。这里,我想检查如果c# WebMethod bool isuserInserted返回true,那么它应该提示警告"已经存在",否则如果c# WebMethod bool isuserInserted返回false,那么它应该提示警告"不存在"。

请回复我的代码中缺少什么。

请注意,我是第一次使用这个Ajax Javascript。

在asp上使用Ajax Javascript调用c#函数:按钮点击,不工作

一些版本的。net需要你添加一个数据过滤器来确保它得到正确的东西:

注意使用数据。d是可以的,但是这个(dataFilter)使它成为版本证明,所以它可以工作,当你在服务器端更新/升级你的版本时,你不必改变代码。

dataFilter: function(data)
        {
            var msg;
            if (typeof (JSON) !== 'undefined' &&
            typeof (JSON.parse) === 'function')
                msg = JSON.parse(data);
            else
                msg = eval('(' + data + ')');
            if (msg.hasOwnProperty('d'))
                return msg.d;
            else
                return msg;
        },
所以你的ajax调用代码看起来像:
$.ajax({
    type: 'POST',
    url: "Demo.aspx/SaveUser",
    data: '{chk: ' + JSON.stringify(chk) + '}',
    contentType: 'application/json; charset=utf-8',
    dataFilter: function (data) {
        var msg;
        if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function') msg = JSON.parse(data);
        else msg = eval('(' + data + ')');
        if (msg.hasOwnProperty('d')) return msg.d;
        else return msg;
    },
    dataType: 'json',
    success: function (data) {
        var val = data.isUserInserted;
        alert(val);
        if (val == true) {
            alert("Barcode No. alredy exist");
            window.location.reload();
        } else {
            alert("Barcode No. does not exist");
        }
    },
    error: function (data) {
        alert("error" + data);
    },
});

使用
var val = data。d代替var 。val = data.isUserInserted

首先检查alert(val)的值是否返回true。然后使用===来表示相等性,这也是检查值和数据类型,或者将值val解析为布尔值