#javascript #asp.net
#javascript #asp.net
Вопрос:
Даже если значение
isAdmin = false
Код не входит в условие
if(!isAdmin)
В результате я не получаю желаемого результата.
Вот как показано ниже, если вызывается в asp.net :
<span onclick="DisplayPrdWeightGrd('<%#Container.ItemIndex 1 %>','<%# Eval("OrderId")%>','<%= Convert.ToBoolean(Utility.IsAdmin()) %>');">
function DisplayPrdWeightGrd(index, OrderId, isAdmin) {
$.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId=" Orderid "amp;tk=" $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
if ($('#tableOrderDetail_' index ' tr').length <= 1) {
$.each(data, function(i, v) {
setDataOnRow(index, v, i);
});
}
},
failure: function(response) {
alert("fail");
},
error: function(response) {
alert(response);
}
});
function setDataOnRow(idx, v, i) {
var totalprice;
if (v.IsGST == true) {
totalprice = parseFloat(v.TotalPrice * (1.1)).toFixed(2);
} else {
totalprice = parseFloat(v.TotalPrice).toFixed(2);
}
//debugger;
var obj = $('#tableOrderDetail_' idx ' tr td table:last');
if (!isAdmin) {
$('#tableOrderDetail_' idx ' tr:last').after('<tr>'
'<td width="25%" >' (i 1) '</td>'
'<td width="25%" class="center">' v.ProductName '</td>'
'<td width="12%" class="center">' v.NoOfCarton '</td>'
'<td width="12%" class="center">' v.ProductQuantity '</td>'
'<td width="12%" class="center">' v.OriginalPrice '</td>'
'<td width="12%" class="center">' v.OrderPrice '</td>'
'<td width="10%" class="center">' v.IsGST '</td>'
'<td width="10%" class="center">' v.Discount '</td>'
'<td width="12%" class="center">' totalprice '</td></tr>');
} else {
$('#tableOrderDetail_' idx ' tr:last').after('<tr>'
'<td width="25%" >' (i 1) '</td>'
'<td width="25%" class="right">' v.ProductName '</td>'
'<td width="12%" class="right">' v.NoOfCarton '</td>'
'<td width="12%" class="right">' v.ProductQuantity '</td>'
'<td width="12%" class="right">' v.OriginalPrice '</td>'
'<td width="12%" class="right">' v.OrderPrice '</td>'
'<td width="10%" class="right">' v.IsGST '</td>'
'<td width="10%" class="center">' v.Discount '</td>'
'<td width="12%" class="center">' totalprice '</td></tr>');
}
}
Я пробовал отладчик, он всегда выполняется, если условие для значения isAdmin равно true или false. Застрял здесь.
Комментарии:
1. Если я меняю на if (isAdmin), то это происходит в условии, а не в другом. ответ наоборот
2. проверьте тип isAdmin. Если это строка, то она всегда будет входить в условие if.
3. хорошо, его тип отображается как string
4. Я опубликовал ответ, чтобы преобразовать его в логическое значение, а затем проверить.
Ответ №1:
Вы устанавливаете значение этого isAdmin
параметра в виде строки. Таким образом, проверка внутри «if» проверяет «истинное» значение строки, которое является любым ненулевым / непустым значением. Таким образом, оба значения 'True'
и 'False'
будут рассматриваться как true
.
Чтобы решить эту:
- удалите кавычки вокруг
<%= Convert.ToBoolean(Utility.IsAdmin()) %>
- убедитесь, что вы получили
true
иfalse
(в нижнем регистре!). Возможно, вам потребуется добавить.ToString().ToLowerInvariant()
. Или (угадывая эту утилиту.isAdmin() возвращает bool):<%= Utility.IsAdmin() ? "true" : "false" %>
Комментарии:
1. использование точки удаления кавычки не вызывает DisplayPrdWeightGrd вообще
2. @HinaKhuman Это было написано
True
(заглавная буква T) илиtrue
(строчная буква)? (оно должно быть в нижнем регистре) Что на самом деле находится в сгенерированном html / javascript? Какие-либо ошибки в консоли javascript?
Ответ №2:
Попробуйте
var isAdmin = Boolean(isAdmin);
затем проверьте условие if-else.
if(!isAdmin)
Комментарии:
1. Все та же ситуация, она не входит в блок условий If (!isAdmin)
2. @HinaKhuman каков результат console.log (typeof isAdmin, isAdmin) после преобразования.
3. var Admin = typeof(isAdmin); дает мне строковый тип
4. var isAdmin = Boolean(isAdmin); console.log(typeof isAdmin, isAdmin); теперь что утешается? скопируйте и вставьте ту же строку, что и в комментарии.
5. в обоих случаях, таких как Saler или Admin, оно дает истинное значение. var Admin = Логическое значение (isAdmin); оповещение (Admin);
Ответ №3:
Существует isAdmin
только внутри вашего вызова ajax, поэтому ваша setDataOnRow
функция не распознает его, поэтому всегда переходите к else
Комментарии:
1. Нет, он входит в setDataOnRow . Я установил оповещение внутри этой функции. предупреждение выдает точное значение
Ответ №4:
function DisplayPrdWeightGrd(index, OrderId, isAdmin) { var Admin = isAdmin.toLowerCase();
$.ajax({
type: "POST",
url: "../handlers/DisplayOrderDetail.ashx?OrderId=" Orderid "amp;tk=" $.now(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
if ($('#tableOrderDetail_' index ' tr').length <= 1) {
$.each(data, function(i, v) {
setDataOnRow(index, v, i);
});
}
},
failure: function(response) {
alert("fail");
},
error: function(response) {
alert(response);
}
});
function setDataOnRow(idx, v, i) {
var totalprice;
if (v.IsGST == true) {
totalprice = parseFloat(v.TotalPrice * (1.1)).toFixed(2);
} else {
totalprice = parseFloat(v.TotalPrice).toFixed(2);
}
//debugger;
var obj = $('#tableOrderDetail_' idx ' tr td table:last');
if (Admin === "false") {
$('#tableOrderDetail_' idx ' tr:last').after('<tr>'
'<td width="25%" >' (i 1) '</td>'
'<td width="25%" class="center">' v.ProductName '</td>'
'<td width="12%" class="center">' v.NoOfCarton '</td>'
'<td width="12%" class="center">' v.ProductQuantity '</td>'
'<td width="12%" class="center">' v.OriginalPrice '</td>'
'<td width="12%" class="center">' v.OrderPrice '</td>'
'<td width="10%" class="center">' v.IsGST '</td>'
'<td width="10%" class="center">' v.Discount '</td>'
'<td width="12%" class="center">' totalprice '</td></tr>');
} else {
$('#tableOrderDetail_' idx ' tr:last').after('<tr>'
'<td width="25%" >' (i 1) '</td>'
'<td width="25%" class="right">' v.ProductName '</td>'
'<td width="12%" class="right">' v.NoOfCarton '</td>'
'<td width="12%" class="right">' v.ProductQuantity '</td>'
'<td width="12%" class="right">' v.OriginalPrice '</td>'
'<td width="12%" class="right">' v.OrderPrice '</td>'
'<td width="10%" class="right">' v.IsGST '</td>'
'<td width="10%" class="center">' v.Discount '</td>'
'<td width="12%" class="center">' totalprice '</td></tr>');
}
}
Это решило мою проблему, используя следующие две строки: 1. В функции
функция DisplayPrdWeightGrd(индекс, OrderID, isAdmin)
Добавить
var Admin = isAdmin.toLowerCase();
2 В функции
функция setDataOnRow(idx, v, i)
добавьте условие if как
if(Admin==="false")
Спасибо за обсуждение.