我正在尝试这样做:
public ActionResult Index(List<Client> Client)
{
if (Client != null)
return View(Client);
return View(db.Client.ToList());
}
[HttpPost]
public ActionResult Search(string cnpj)
{
List<Client> Client = db.Client // here it finds one client
.Where(c => cnpj.Equals(c.Cnpj))
.ToList();
return RedirectToAction("Index", Client);
}
在搜索操作后,它将转到Index,但Client参数始终为null ..
有人知道为什么吗?
我这样做并且有效:
public ActionResult Index(string cnpj)
{
if (!string.IsNullOrEmpty(cnpj))
{
List<Client> clients = db.Client
.Where(c => cnpj.Equals(c.Cnpj))
.ToList();
return View(clients);
}
return View(db.Client.ToList());
}
答案 0 :(得分:0)
你不能简单地调用函数而不是重定向?
从Search
操作
Index(Client)
重定向中发生的情况是,使用重定向URL将HTTP代码302发送到浏览器,然后浏览器向服务器发送新请求,因此Client
为null
,因为浏览器无法访问把它退回。
编辑: - 阅读评论后
在这种情况下,你有两个选择
1.进行另一个Index
操作并将参数类型更改为字符串,以便现在可以直接调用
2.使用TempData()
。这是一个由MVC提供的特殊商店,它可以存储一段时间的对象,并且在第一次访问它时会失去它的价值。
只需将客户列表添加到临时数据TempData.Add("Client",Client)
,然后将其用于操作索引为TempData["Client"]
答案 1 :(得分:0)
您好应该创建一个自定义ModelBinder来传递自定义类型,如下所示: ASP.NET MVC controller actions with custom parameter conversion?
然后他推荐了一篇非常好的博文: ASP.NET MVC controller actions with custom parameter conversion?
希望这有帮助