Я не получаю предупреждение JavaScript на моей странице контроллера - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть этот код в моем ActionResult

public ActionResult Copy( int bvVariableid ) {
            var iReturn = _bvRepository.CopyBenefitVariable( bvVariableid, CurrentHealthPlanId, CurrentControlPlanId, _bvRepository.GetSecInfo( ).UserId, IsNascoUser());
            if (iReturn == -999)
                return new JavaScriptResult() { Script = "alert(Unique variable name could not be created');" };
            if( iReturn != -1 )
                return Json( new { RedirectUrl = string.Format( "/BvIndex/Index/{0}?bvIndex-mode=select", iReturn ) } );
            return RedirectToRoute( "Error" );
        }

Это код, который у меня есть в моем представлении.

CopyBenefitVariable = function (bvId, bvName) {
            if (confirm('Are you sure you want to copy from the Benefit Variable ' + bvName + ' ?')) {
                $.post(
              "/BvIndex/Copy/",
              { bvVariableid: bvId },
              function (data) {
                  window.location = data.RedirectUrl;
              }, "json");
            }
        };

Когда IReturn равен -999, я не получаю предупреждение JavaScriptResultполе на моей странице.

это то, что я делаю здесь неправильно?

Может ли какое-нибудь тело помочь мне.

Спасибо

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

Я думаю, в этой строке есть ошибка:

return new JavaScriptResult() { Script = "alert(Unique variable name could not be created');" };

Исправлено:

  return new JavaScriptResult() { Script = "alert('Unique variable name could not be created');" };
0 голосов
/ 15 сентября 2011

Ваша проблема, вероятно, связана с вашим клиентским JavaScript. Метод .post () в ajax на самом деле является сокращением для:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

Итак, ваш код на стороне клиента говорит jQuery интерпретировать результат как объект json (даже если вы отправили обратно скрипт).

$.post(
  "/BvIndex/Copy/",  // url
  { bvVariableid: bvId }, // data
  function (data) {
     window.location = data.RedirectUrl;  // success
  },
  "json" // dataType
);

Я бы изменил ваш код так:

public ActionResult Copy( int bvVariableid ) {
    var iReturn = _bvRepository.CopyBenefitVariable( bvVariableid, CurrentHealthPlanId, CurrentControlPlanId, _bvRepository.GetSecInfo( ).UserId, IsNascoUser());

    if (iReturn == -999)
        return new Json(new { type = "msg", data = "Unique variable name could not be created" });
    if( iReturn != -1 )
        return Json( new { type = "url", data = string.Format( "/BvIndex/Index/{0}?bvIndex-mode=select", iReturn ) } );
        return RedirectToRoute( "Error" );
}

И ваш код представления должен выглядеть так:

CopyBenefitVariable = function (bvId, bvName) {
    if (confirm('Are you sure you want to copy from the Benefit Variable ' + bvName + ' ?')) {
        $.post(
          "/BvIndex/Copy/",
          { bvVariableid: bvId },
          function (data) {
              if (data.type == "url") {
                  window.location = data.RedirectUrl;
              } else if (data.type == "msg") {
                  alert(data.data);
              }
          }, "json");
        }
    };
0 голосов
/ 14 сентября 2011

Вы можете пометить мой ответ, если хотите, но общепринято, что JavaScriptResult был плохим шагом со стороны команды ASP.NET MVC.При этом ваш образец уже возвращает Json Результат действия для одного из ваших условий.Вы можете сделать то же самое для обоих предметов.Если вы изменили свой объект JSON, например:

 return Json( new { success = bool,  RedirectUrl = value } );

, тогда вы могли бы изменить свою клиентскую функцию на что-то вроде:

function (data) {
  if(data.success === true) {
    window.location = data.RedirectUrl;
  } else {
    alert('Unique variable name could not be created');
  }
}

Я знаю, что это напрямую не решает проблему с JavaScriptResult, но он должен получить ожидаемый результат кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...