Проблема с простым условием if в JavaScript со строкой

Итак, что-то очень странное, ниже приведены значения предупреждений:

  • consumerSupportEditableRole = true
  • superAdminRole = false
  • combRole = false

Однако странная вещь заключается в том, что оповещение в сочетании с ролью дает мне customerSupport/ConsumerContact/GetEmailLog. Так что по какой-то безбожной причине он входит в блок if. Я ожидал бы, что это пойдет в блок else, и предупреждение должно выплевывать Внедрение / Организация / GetEmailLog

var consumerSupportEditableRole = '@(Roles.IsUserInRole("Consumer Support Editable") ? "true" : "false")';
var superAdminRole = '@(Roles.IsUserInRole("Super Admin") ? "false" : "true")';
var combinedRole = consumerSupportEditableRole && superAdminRole
alert("consumerSupportEditableRole: " + consumerSupportEditableRole);
alert("superAdminRole: " + superAdminRole);
alert("superAdminRole && consumerSupportEditableRole: " + combinedRole);
if (combinedRole)
{
    var url = '@Url.Action("GetEmailLog", "ConsumerContact", new { Area = "ConsumerSupport" })';
}
else
{
    var url = '@Url.Action("GetEmailLog", "Organization", new { Area = "Implementation" })';
}

2 ответа

Решение

Удалите кавычки, вы получите не логические значения в JS, а строки

var consumerSupportEditableRole = @(Roles.IsUserInRole("Consumer Support Editable") ? "true" : "false");
var superAdminRole = @(Roles.IsUserInRole("Super Admin") ? "false" : "true");
var combinedRole = consumerSupportEditableRole && superAdminRole
alert("consumerSupportEditableRole: " + consumerSupportEditableRole);
alert("superAdminRole: " + superAdminRole);
alert("superAdminRole && consumerSupportEditableRole: " + combinedRole);
if (combinedRole)
{
    var url = '@Url.Action("GetEmailLog", "ConsumerContact", new { Area = "ConsumerSupport" })';
}
else
{
    var url = '@Url.Action("GetEmailLog", "Organization", new { Area = "Implementation" })';
}

Вы устанавливаете consumerSupportEditableRole а также superAdminRole к строкам, а не к логическим значениям. Так combinedRole на самом деле:

var combinedRole = "true" && "false";

что делает это "false"Это правда.

Другие вопросы по тегам