调用RedirectToAction不会刷新页面

时间:2016-03-26 08:12:47

标签: javascript asp.net-mvc

视图中,我有一个链接按钮,有一些java脚本可以从视图中收集信息,然后发布到相应的操作' GroupDeny '

@Html.ActionLink("Deny Selected", "GroupDeny", null, new { @class = "denySelectedLink" })

    @section Scripts {
      @Scripts.Render("~/bundles/jqueryval")

      <script type="text/javascript">

        $(document).on('click', '.denySelectedLink', function (e) {
          //Cancel original submission
          e.preventDefault();

          var identifiers = new Array();

          //build the identifiers . . .

          var jsonArg = JSON.stringify(identifiers);
          $.post('/LicenseAssignment/GroupDeny?licensePermissionIdentifiers=' + encodeURIComponent(jsonArg));
        });        

      </script>

然后在控制器中, GroupDeny 将更新数据库,然后 调用 RedirecToAction 以刷新视图

public class LicenseAssignmentController : Controller
{
    [HttpPost]
    public ActionResult GroupDeny(string licensePermissionIdentifiers)
    {
       // changes the DB

       return RedirectToAction("Index");
    }

  // GET: 
  public async Task<ActionResult> Index()
  {
    var model = get data from DB

    return View(model);
  }

所有内容似乎都按预期工作, RedirectToAction(“Index”)执行后将调用索引,并且模型会在我观看时更新到日期在调试期间,唯一的问题是页面根本没有刷新,也就是说视图仍然保持不变,但是在我手动刷新页面后(按F5),数据将使用DB中的值更新< / p>

2 个答案:

答案 0 :(得分:2)

当我们希望离开页面时,我们会使用AJAX。您的@using(Html.BeginForm("GroupDeny", "LicenseAssignment", FormMethod.Post)) { <input type="hidden" value="" name="licensePermissionIdentifiers" id="licensePermissionIdentifiers" /> } 是一个AJAX请求。

由于您希望导航向页面添加表单

$(document).on('click', '.denySelectedLink', function (e) {
    e.preventDefault();  // prevent link navigation

    var identifiers = new Array();

    //build the identifiers . . 

    // populate the form values
    $("#licensePermissionIdentifiers").val(identifiers);

    $("form").submit();
});

现在提交此表单将导航

RedirectToAction()

302 Redirect向浏览器返回LicenseAssignment/Index$first = `ls -sl -head 1`; $last = `ls -sl -tail 1`; string $all_except_last[] = stringArrayRemove(`ls -sl -tail 1`, `ls -sl -fl`); string $all_except_first[] = stringArrayRemove(`ls -sl -head 1`, `ls -sl -fl`); //don't forget to use -fl (flat list) flag ,然后点击了索引操作。

答案 1 :(得分:1)

由于您使用的是Ajax,因此您必须重定向$.post来电的返回,并将GroupDeny更改为JsonResult

这样的事情可能是:

JS

$.post('/LicenseAssignment/GroupDeny?licensePermissionIdentifiers=' + encodeURIComponent(jsonArg), function(data){
    if(data.Success){
        //redirect
        window.location.reload();
    }else{
        //handle error
    }
});

控制器操作

[HttpPost]
public JsonResult GroupDeny(string licensePermissionIdentifiers)
{
   // changes the DB

   return Json(new { Success = true });
}