0

我正在尝试这样做:

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

动作搜索后,它转到索引,但客户端参数始终为空..

有人知道为什么吗?


我这样做并且工作:

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());
}
4

2 回答 2

0

嗨,您应该创建一个自定义 ModelBinder 来传递自定义类型,如以下问题所示: ASP.NET MVC controller actions with custom parameter conversion?

然后他推荐了一篇非常好的博文: ASP.NET MVC controller actions with custom parameter conversion?

希望这可以帮助

于 2012-04-19T17:22:24.563 回答
0

你不能简单地调用函数而不是重定向吗?从Search动作中调用它

Index(Client)

重定向中发生的情况是使用重定向 URL 将 302 的 HTTP 代码发送到浏览器,然后浏览器向服务器发送新请求,因此Clientnull因为浏览器无法将其发送回来。编辑: -
在阅读了这种情况下的评论后,您有两个选择
1.一个是进行另一个Index操作并将参数类型更改为字符串,因此现在您可以直接调用它
2.使用TempData()。这是 MVC 提供的一种特殊存储,它可以存储一个对象一段时间,并在第一次访问时失去它的值。
只需将客户端列表添加到临时数据TempData.Add("Client",Client)中,然后在操作索引中使用它作为TempData["Client"]

于 2012-04-19T16:55:56.277 回答