4

我试过这个:

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

为什么会发生?第二个代码块有问题吗?

4

2 回答 2

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但是数据将在读取请求结束时自动删除。

TempDataMSDN上

笔记:

  • C#定义的私有变量中 的通用命名约定为驼峰式。client而不是Client.
  • 对于List<Client>变量,我将clients用作名称而不是client.
  • 您应该为字符串使用资源,"client"这样它就不会不同步,这意味着一种方法将数据放入其中,"Client"而另一种方法则在寻找数据"client""Client Data"
于 2012-04-19T17:54:49.343 回答
0

好的,所以您的问题是您将客户端作为参数传递,但是您的操作方法期望的是一个包含属性“客户端”的对象。或者,如果有一个专门要求客户端参数的路由定义,它会像您编写的那样工作。

于 2012-04-19T18:01:45.733 回答