15

これが私がやろうとしていることです:

public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(ContactModel model)
{
    if (ModelState.IsValid)
    {
        // Send email using Model information.

        return RedirectToAction("Gracias", model);
    }

    return View(model);
}

public ActionResult Gracias(ContactModel model)
{
    return View(model);
}

3つのアクションメソッドはすべて同じコントローラーにあります。基本的に、ユーザーは連絡フォームにいくつかのデータを入力し、Modelオブジェクトの名前を使用してそれらをありがとうページにリダイレクトしたいと思います。

コードはそのままですが、URLはGET変数とともに渡されます。理想的ではありません。

http://localhost:7807/Contacto/Gracias?Nombre=Sergio&Apellidos=Tapia&Correo=opiasdf&Telefono=oinqwef&Direccion=oinqef&Pais=oinqwef&Mensaje=oinqwef

助言がありますか?

4

3 に答える 3

38

TempDataのソリューションのようですね!

[HttpPost]
public ActionResult Index(ContactModel model)
{
  if (ModelState.IsValid)
  {
    // Send email using Model information.
    TempData["model"] = model;
    return RedirectToAction("Gracias");
  }

  return View(model);
}

public ActionResult Gracias()
{
  ContactModel model = (ContactModel)TempData["model"];
  return View(model);
}
于 2012-10-22T21:35:06.910 に答える
2

する代わりに

return RedirectToAction("Gracias", model);

あなたができる

[HttpPost]
public ActionResult Index(ContactModel model)
{
    if (ModelState.IsValid)
    {
        // Send email using Model information.

        return View("Gracias", model);
    }

    return View(model);
}

Gracias コントローラー アクションを削除します。上記の「Gracias」ビューを使用すると、ContactModel モデルが表示されます。

同じモデルを使用し、ワークフロー ex のロック ステップの一部である場合、別のコントローラー アクションを用意する必要はないと思います。「インデックスへの POST が成功すると、常に Gracias ビューが表示されます」

モデルをTempDataに保存することもできます(これは1リクエストのセッション状態のようなものです)が、状況が複雑になるだけなので、あなたの状況ではそれを行う意味がありません

考え?

于 2012-10-22T21:39:07.427 に答える
-1

簡単な答えは、モデル全体を渡すのではなく、リポジトリからモデルを取得するために使用できる識別子を渡すことです。

[HttpPost]
public ActionResult Index(ContactModel model)
{
    if (ModelState.IsValid)
    {
        // Send email using Model information.

        return RedirectToAction("Gracias", model.ID);
    }

    return View(model);
}

public ActionResult Gracias(int contactID)
{
    ContactModel model = new ContractRepository().GetContact(contactID);
    return View(model);
}
于 2012-10-22T21:37:23.667 に答える