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

时间:2015-07-29 10:25:49

标签: javascript c# asp.net

我正在使用下面的代码检查如果我在Tetxbox中输入的值已经存在于数据库中,则显示警告“值已存在”。为此我在asp:Button(“Save”)上使用Ajax Javascript点击:

Ajax 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 code:

<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。

3 个答案:

答案 0 :(得分:1)

.net的某些版本需要您添加数据过滤器以确保它得到正确的结果:

注意使用data.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);
    },
});

答案 1 :(得分:0)

如果返回true,首先检查 alert(val)的值。 然后使用 === 作为检查值和数据类型的相等,或者将值 val解析为布尔

答案 2 :(得分:0)

使用
var val = data.d 而不是var val = data.isUserInserted

它会起作用。

相关问题