如何编写RedirectToAction的扩展方法在Mvc中设置TempData?

时间:2018-06-12 04:35:45

标签: asp.net-core asp.net-core-mvc

我想为mvc控制器中调用的RedirectToAction()方法编写扩展方法。在这个方法中,我想用我的消息设置 TempData ,并有类似 RedirectToAction("索引")。WithMessage(消息)

我写了这段代码

    public static class ActionResultExtension
{
    public static IActionResult WithMessage(this IActionResult result,string message)
    {

    }
} 

但问题是我不知道应该如何访问上下文

1 个答案:

答案 0 :(得分:3)

有趣的问题:)

初始解决方案是实施自定义ActionResult,它会覆盖ExecuteResult方法来设置TempData消息。

创建自定义ActionResult: `

public class RedirectWithConfirmationMessageResult : ActionResult
{
    private readonly string message;

    public RedirectWithConfirmationMessageResult(ActionResult redirectBaseResult, string message)
    {
        BaseResult = redirectBaseResult;
        this.message = message;
    }

    public ActionResult BaseResult { get; private set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.Controller.TempData["Message.Notification"] = this.message;

        BaseResult.ExecuteResult(context);
    }
}

创建扩展方法

public static class RedirectExtensions
{
    public static RedirectWithConfirmationMessageResult WithConfirmation(this RedirectToRouteResult instance, string message)
    {
        return new RedirectWithConfirmationMessageResult(instance, message);
    }

    public static RedirectWithConfirmationMessageResult WithConfirmation(this RedirectResult instance, string message)
    {
        return new RedirectWithConfirmationMessageResult(instance, message);
    }        
}

<强>用法

[HttpGet]
public ActionResult DoSomething()
{
    return this
        .RedirectToAction("Index", "Home")
        .WithConfirmation("Saved Successfully !");
}
希望有所帮助。

致信this帖子的作者。