我是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
。
我已经用谷歌搜索了一些帖子,但我不明白,为什么我的代码不起作用。
没有错误,只有这个空值对象..
我感谢任何帮助! :)
答案 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
});
}