我没有在控制器页面上收到警报javascript

时间:2011-09-14 15:22:12

标签: javascript jquery asp.net-mvc json asp.net-mvc-2

我在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 个答案:

答案 0 :(得分:1)

我知道,这一行有一个错误:

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

更正:

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

答案 1 :(得分:0)

如果您愿意,可以标记我的答案,但人们普遍认为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的问题,但它应该得到代码的预期结果。

答案 2 :(得分:0)

您的问题可能源于您的客户端JavaScript。 ajax中的.post()方法实际上是:

的快捷方式
$.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");
        }
    };