我正在使用下面的代码检查如果我在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。
答案 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 。
它会起作用。