我试过了:
public ActionResult Index() // << it starts here
{
return RedirectToAction("ind", new { name = "aaaaaaa" });
}
[ActionName("ind")]
public ActionResult Index(string name)// here, name is 'aaaaaaa'
{
return View();
}
它有效..
所以,我试过这个:
[HttpPost]
public ActionResult Search(string cnpj) // starts here
{
List<Client> Client = db.Client // it always find one client
.Where(c => cnpj.Equals(c.Cnpj))
.ToList();
return RedirectToAction("Index", Client); // client is not null
}
public ActionResult Index(List<Client> Client) //but when goes here, client is always null
{
if (Client != null)
return View(Client);
return View(db.Client.ToList());
}
为什么会这样?第二个代码块有问题吗?
答案 0 :(得分:6)
您只能在重定向中传递基本类型,您可以将TempData
用于复杂类型。
[HttpPost]
public ActionResult Search(string cnpj) // starts here
{
List<Client> Client = db.Client // it always find one client
.Where(c => cnpj.Equals(c.Cnpj))
.ToList();
TempData["client"] = Client; //<=================
return RedirectToAction("Index");
}
public ActionResult Index()
{
var Client = TempData["client"]; //<=================
if (Client != null)
return View(Client);
return View(db.Client.ToList());
}
基本上TempData
就像在Session
中保存数据一样,但数据会在请求结束时自动删除。
TempData
备注:强>
C#
中定义的私有变量的通用命名约定是驼峰式的。
client
代替Client
。List<Client>
变量,我会使用clients
作为名称,而不是client
。"client"
字符串的资源,这样它就不会失去同步,这意味着一种方法会将数据放入"Client"
,而另一种方法会在"client"
中查找数据或"Client Data"
答案 1 :(得分:0)
好的,所以您的问题是您将客户端作为参数传递,但您的操作方法所期望的是包含属性“Client”的对象。或者,如果存在专门请求客户端参数的路由定义,它将按照您编写的方式工作。