繁体   English   中英

RedirectToAction到另一个Controller并传递参数

[英]RedirectToAction to another Controller and passing parameters

我是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。

我自己编写的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;
    }
}

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

DefaultModelBinder无法基于查询字符串参数初始化实例或Error类,因为您在所有属性上都private setprivate 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"});

并删除两个构造函数

在命名匿名参数时,请尝试使用小写“error”。

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

我相信参数是按名称传递的,现在他无法将“Error”链接到方法的参数名称。

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

public ActionResult YourAction()
{

   // Here user object with updated data

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM