MVC 5 - RedirectToAction Not Redirecting

2019-06-16 05:24发布

Hi I have a problem with my RedirectToAction not redirecting. My code successfully hits a breakpoint placed on the Redirect so I can confirm it is being called. Nothing seems to happen however.

I have tried looking at the network traffic in Chrome and there doesn't seem to be anything obvious. I must be missing something simple!

    //
    // POST: /Blog/CreateBlog
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CreateBlog(BlogViewModel model)
    {
        var userId = User.Identity.GetUserId();
        model.UserId = userId;

        if (ModelState.IsValid && model.UserId != null)
        {
            Mapper.CreateMap<BlogViewModel, Blog>();
            if (_blogProcess.CreateBlog(Mapper.Map<BlogViewModel, Blog>(model)))
            {
                RedirectToAction("Index", "Blog");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

3条回答
放我归山
2楼-- · 2019-06-16 06:13

try

return RedirectToAction("Index", "Blog");
查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-06-16 06:15

In addtion to Nalaka526's answer: if we look into the documentation for RedirectToAction we can see that it's an instance method of the Controller class which has RedirectToRouteResult as return type, which derives from ActionResult which indicates that we have to return it, just like we return View and PartialView for example.

查看更多
Viruses.
4楼-- · 2019-06-16 06:19
  1. If you are using @using(Html.BeginForm("Index","Blog"..) on the view page then

    public ActionResult CreateBlog(BlogViewModel model)
    {
        ....
        return RedirectToAction("Index", "Blog") 
    } 
    

    should work.

  2. If you are using Ajax.BeginForm, then you need to redirect to a new action/url from javascript OnSuccess event. sample code for your view

    @using (Ajax.BeginForm("Index", "Blog", new AjaxOptions { HttpMethod = "post" , OnSuccess="RedirectFunction"}
    
    function RedirectFunction(data)
    {
        window.location.href = “Index”;
    }
    

Hope this helps.

查看更多
登录 后发表回答