RedirectToAction到另一个Controller并传递参数

时间:2015-06-10 11:47:12

标签: c# asp.net asp.net-mvc asp.net-mvc-4

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

我有 HomeController ,其中包含此方法:

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

现在我有另一个Controller,其中包含以下行:

return RedirectToAction("Error","Home", new { Error = (new Error("ErrorName","ErrorDescription"))} );

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

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

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;
    }
}

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

3 个答案:

答案 0 :(得分: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
  }
}

您也可以使用

return RedirectToAction("Error","Home", new { name = "ErrorName", description = "ErrorDescription"});

并删除两个构造函数

答案 1 :(得分:0)

尝试使用"错误"以小写字母命名匿名参数时。

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

我相信参数是按名称传递的,现在他无法链接"错误"到方法的参数名称。

答案 2 :(得分:0)

您不能在这样的网址中传递复杂对象。您必须发送其组成部分:

public ActionResult YourAction()
{

   // Here user object with updated data

   return RedirectToAction("Error","Home", new { 
        name = "ErrorName", 
        description = "ErrorDescription", 
        number = 0
   });
}