参数在动作之间传递

时间:2012-04-19 17:53:03

标签: asp.net-mvc

我试过了:

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

为什么会这样?第二个代码块有问题吗?

2 个答案:

答案 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中保存数据一样,但数据会在请求结束时自动删除。

MSDN

上的

TempData

备注:

  • C#中定义的私有变量的通用命名约定是驼峰式的。 client代替Client
  • 对于List<Client>变量,我会使用clients作为名称,而不是client
  • 您应该使用"client"字符串的资源,这样它就不会失去同步,这意味着一种方法会将数据放入"Client",而另一种方法会在"client"中查找数据或"Client Data"

答案 1 :(得分:0)

好的,所以您的问题是您将客户端作为参数传递,但您的操作方法所期望的是包含属性“Client”的对象。或者,如果存在专门请求客户端参数的路由定义,它将按照您编写的方式工作。