参数在动作之间传递

时间:2012-04-19 16:52:34

标签: asp.net-mvc

我正在尝试这样做:

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

2 个答案:

答案 0 :(得分:0)

你不能简单地调用函数而不是重定向? 从Search操作

中调用此方法
Index(Client)

重定向中发生的情况是,使用重定向URL将HTTP代码302发送到浏览器,然后浏览器向服务器发送新请求,因此Clientnull,因为浏览器无法访问把它退回。 编辑: - 阅读评论后 在这种情况下,你有两个选择
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?

希望这有帮助