Asp.net mvc ASP.NET MVC-通过传递一些数据重定向到控制器/操作

Asp.net mvc ASP.NET MVC-通过传递一些数据重定向到控制器/操作,asp.net-mvc,Asp.net Mvc,我在不同的控制器中有操作,需要在执行之前检查某个条件。如果不满足条件,我希望将用户重定向到另一个页面,其中包含关于下一步操作的说明(说明将包括用户必须遵循的链接) 例如,SendMessage()操作位于消息控制器中: public ActionResult SendMessage() { // check if user has enough credit if (!hasEnoughCredit(currentUser)) { // redirect

我在不同的控制器中有操作,需要在执行之前检查某个条件。如果不满足条件,我希望将用户重定向到另一个页面,其中包含关于下一步操作的说明(说明将包括用户必须遵循的链接)

例如,SendMessage()操作位于消息控制器中:

public ActionResult SendMessage()
{
    // check if user has enough credit
    if (!hasEnoughCredit(currentUser))
    {
        // redirect to another page that says:

        // "You do not have enough credit. Please go to LinkToAddCreditAction
        // to add more credit."
    }

    // do the send message stuff here 
}
我希望在Requirements controller中有一个名为ShowRequirements()的通用操作

在SendMessage()操作中,我想设置要向用户显示的消息,然后将用户转发到ShowRequirements()操作。我只是不希望消息出现在ShowRequirements操作的URL中


是否有任何方法将此数据传递给ShowRequirements()操作?

您可以将其放入TempData[“message”]中,并将其传递给重定向到的新操作。

您可以将其放入TempData[“message”]中,并将其传递给重定向到的新操作。

好的,我想我弄错了。正如John和Andrew提到的,我只需要通过ViewData将数据传递给视图

因此,我在/views/Shared中创建了RequirementsPage.aspx。现在,无论我执行哪种操作,我都会填写ViewData字典并将其传递给RequirementsPage.aspx,如下所示:

public ActionResult SendMessage()
{
    // check if user has enough credit
    if (!hasEnoughCredit(currentUser))
    {
        // redirect to another page that says:
        ViewData["key1"] = "some message";
        ViewData["key2"] = "UrlToTheAction";
        return View("RequirementsPage");
    }

    // do the send message stuff here 
}

好吧,我想我弄错了。正如John和Andrew提到的,我只需要通过ViewData将数据传递给视图

因此,我在/views/Shared中创建了RequirementsPage.aspx。现在,无论我执行哪种操作,我都会填写ViewData字典并将其传递给RequirementsPage.aspx,如下所示:

public ActionResult SendMessage()
{
    // check if user has enough credit
    if (!hasEnoughCredit(currentUser))
    {
        // redirect to another page that says:
        ViewData["key1"] = "some message";
        ViewData["key2"] = "UrlToTheAction";
        return View("RequirementsPage");
    }

    // do the send message stuff here 
}

这可能是最好的解决方案,但听起来您可能需要重新考虑您的业务逻辑。为什么两个不相交的操作需要同时发生,通过重定向连接,以便某些进程发生?也许您需要抽象一些代码?正确。您只需返回显示错误所需的视图(带有ViewData/ViewModel),而无需重定向。我想不出任何其他方法来检查这些条件并相应地采取行动。如何执行相同的场景?好的,那么每个视图都负责显示该操作的错误消息/说明?我必须检查视图中的一些标志,并显示消息,而不是该视图显示的正常结果?这可能是最好的解决方案,但听起来您可能需要重新考虑您的业务逻辑。为什么两个不相交的操作需要同时发生,通过重定向连接,以便某些进程发生?也许您需要抽象一些代码?正确。您只需返回显示错误所需的视图(带有ViewData/ViewModel),而无需重定向。我想不出任何其他方法来检查这些条件并相应地采取行动。如何执行相同的场景?好的,那么每个视图都负责显示该操作的错误消息/说明?我必须检查视图中的一些标志,并显示消息,而不是该视图显示的正常结果?