如果我在main函数之外调用它,MVC Redirect将无法工作

时间:2017-02-14 14:43:12

标签: c# asp.net-mvc visual-studio controller

所以,当我点击一个按钮时 - 它会点击提交。我设法让URL值很好。我的问题是,点击“RedirectingTime”功能不会重定向页面。它只是停止并显示一个空白页面。如果我把它放在提交函数中,那么它工作正常,但我不想将我的提交从void更改为重定向,因为我还想返回一个视图,如果它出错。 谢谢!

    [HttpPost]
    public void Submit(URLModel model)
    {

        string url = EmailEnd(model);

        if (url != "0")
        {
            RedirectingTime(url);
        }
        else
        {
            Error();
        }
    }


    public RedirectResult RedirectingTime(string url)
    {
        return Redirect(url);
    }

    public ActionResult Error()
    {
        return View();
    }

根据以下答案 - 工作代码为:

    [HttpPost]
    public ActionResult Submit(URLModel model)
    {

        string url = EmailEnd(model);

        if (url != "0")
        {
            return Redirect(url);
        }
        else
        {
            return View("Error");
}
        }
        }

2 个答案:

答案 0 :(得分:1)

问题是您的Submit操作返回void。这将始终导致空白页面,因为void与EmptyResult基本相同。

点击的操作会返回结果,而不是您从中调用的操作。即使RedirectingTime返回重定向,您的Submit操作也永远不会返回 ,因此结果仍然是EmptyResult而不是RedirectResult

此外,对于它的价值,显式设置操作的返回值的类型是非典型的,也是不必要的。实际上,每个MVC操作签名都应该只有ActionResult作为返回。您可以实际返回任何内容,RedirectResultViewResultJsonResult等。

答案 1 :(得分:1)

您问题的关键在于您的提交操作未返回任何内容。它必须返回ActionResult(或ActionResult的派生形式)。如果要“重定向”到控制器上的其他操作,请使用RedirectToAction。您可以使用或不使用参数,如下所示:

[HttpPost]
public ActionResult Submit(URLModel model)
{

    string url = EmailEnd(model);

    if (url != "0")
    {
        return RedirectToAction("RedirectingTime", new { url = url });
    }
    else
    {
        return RedirectToAction("Error");
    }
}

public RedirectResult RedirectingTime(string url)
{
    return Redirect(url);
}

public ActionResult Error()
{
    return View();
}