RedirectToAction到另一个Controller并传递参数

Ba5*_*14n 6 c# asp.net asp.net-mvc asp.net-mvc-4

我是C#的新手,特别是在ASP.NET MVC中.

我有我的HomeController,它包含这个方法:

public ActionResult Error(Error error)
{
    return View(error);
}
Run Code Online (Sandbox Code Playgroud)

现在我有另一个Controller,里面有以下行:

return RedirectToAction("Error","Home", new { Error = (new Error("ErrorName","ErrorDescription"))} );
Run Code Online (Sandbox Code Playgroud)

您可能会注意到,我正在尝试将Error对象传递给另一个控制器,然后该控制器应将其传递给View.

我自己编写的Error类,没什么了不起的:

public class Error
{
    public String name {  get; private set; }
    public String description {  get; private set; }
    public int number {  get; private set; }

    public Error(String name, String description)
    {
        this.name = name;
        this.description = description;
        number = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,每当我尝试访问HomeController中的错误变量时,它就是null.我已经用谷歌搜索了一些帖子,但我不明白,为什么我的代码不起作用.没有错误,只有这个空值对象..我感谢任何帮助!:)

小智 6

在DefaultModelBinder无法初始化实例或您的Error基于查询字符串参数,因为你有课private set上的所有属性.

你的模型应该是

public class Error
{
  public String name {  get; set; }
  public String description {  get; set; }
  public int number {  get; set; }

  public Error() // you must add a parameter-less constructor
  {
  }

  public Error(String name, String description)
  {
    this.name = name;
    this.description = description;
    // number = 0; // no need for this - the default is 0
  }
}
Run Code Online (Sandbox Code Playgroud)

你也可以使用

return RedirectToAction("Error","Home", new { name = "ErrorName", description = "ErrorDescription"});
Run Code Online (Sandbox Code Playgroud)

并删除两个构造函数