在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。
一些版本的。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解析为布尔值