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

なぜそれが起こるのですか?2 番目のコード ブロックに何か問題がありますか?

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 に答える