RedirectToAction发送对象

时间:2019-09-06 11:17:13

标签: c# .net-core

我知道也有类似的问题,但是这些问题仅传递一个值。

我的问题是,使用RedirectToAction()方法,属性对象始终为null。 但是,如果使用int或string,则可以成功将数据传递给Error Method。

如果您看图片。

enter image description here

如果我使用此代码,它将正常工作。

string error = "Test"
return RedirectToAction("Error2", "Home", new { errorMessage = error });

错误2收到错误消息"Test"

[AllowAnonymous]
public IActionResult Error2(string errorMessage)
{

    return View(new ErrorViewModel
    { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

,但是如果这不起作用。消息为 null

ErrorViewModel error = new ErrorViewModel
{
    RequestId = "Home",
    ControllerName = "Home Controller",
    ActionName = "Index",
    ErrorMessage = "Error Message 1"
};

return RedirectToAction("Error", "Home", new { errorMessage = error });

错误方法的errorMessage一切都为空。

[AllowAnonymous]
public IActionResult Error(ErrorViewModel errorMessage)
{
    log.Log(errorMessage);
    return View(new ErrorViewModel
    { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

2 个答案:

答案 0 :(得分:2)

TempData用于类似的复杂类型。

ErrorViewModel error = new ErrorViewModel {
    RequestId = "Home",
    ControllerName = "Home Controller",
    ActionName = "Index",
    ErrorMessage = "Error Message 1"
};

TempData["Message"] = error;

return RedirectToAction("Error", "Home");

并在目标操作中检索它

[AllowAnonymous]
public IActionResult Error() {
    if (TempData["Message"] != null) {
        ErrorViewModel errorMessage = (ErrorViewModel) TempData["Message"];
        log.Log(errorMessage);    
    }

    return View(new ErrorViewModel
    { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

答案 1 :(得分:0)

这正在工作。

public IActionResult Index()
    {

        return RedirectToAction("Error", "Home", new ErrorViewModel
        {
            RequestId = "Home",
            ControllerName = "Home Controller",
            ActionName = "Index",
            ErrorMessage = "Error Message 1"
        });
    }

    [AllowAnonymous]
    public IActionResult Error(ErrorViewModel error)
    {
        log.Log(error);
        return View(new ErrorViewModel
        { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }