0

.NET MVC3 で get メソッドをパラメーター化しようとしています。get メソッドがあるとします (簡略化):

[HttpGet]
public ActionResult Message(string message)
{
    ...
    return View(message);
}

そして投稿方法:

[HttpPost]
public ActionResult DoSomething() 
{
    ...
    return RedirectToAction("Message", new { message = ok ? "Done it" : "Nope" });
}

この理由は、さまざまな Post メソッドから動的に生成されたさまざまなメッセージが多数ある可能性があり、それらを共通のビューに表示したいからです。メッセージ ビューも非常に複雑なので、コードの繰り返しは避けたいと考えています。メッセージ アクションをパラメータ化することは、まさに完璧なソリューションです。

これは問題なく動作しますが、1 つのことを除けば、メッセージ文字列は常に URL に存在し、これはユーザーにとってあまり良いものではありません。また、URL の最大長などに潜在的な問題があります。

例えば。http://www.domain.com/Controller/Message?message=いいえ

私が本当に望んでいるのは、Get メソッドから正しいメッセージを含むメッセージ ページを返すことですが、URL も次のように読み取るだけです: http://www.domain.com/Controller/Message

アイデアはありますか?ありがとう

4

5 に答える 5

2

SLaksが言ったように、メッセージはサーバー側に保存できますがController.TempData、これには。よりも適していSessionます。

于 2012-11-14T14:32:44.127 に答える
2

メッセージを に保存しSessionてから、メッセージ アクションでセッションから削除できます。

于 2012-11-14T14:31:19.773 に答える
1

なぜアクションにリダイレクトするのですか? そのビューをインラインでレンダリングしてみませんか。特定のコードを実行する必要がある場合は、それを実装して継承するベース コントローラーを使用することもできるため、同じことを繰り返す必要はありません。注:Messageビューを共有ビュー フォルダーに保持して、任意のコントローラーで検索できるようにすることができます。

public abstract class BaseController : Controller
{
     public ActionResult MessageView(string message)
     {
         ... some common logging functions or such...

         return View("Message",message);
     }
}

と呼ばれる

public class FooController : BaseController
{
    [HttpPost]
    public ActionResult DoSomething() 
    {
        ...
        return MessageView( ok ? "Done it" : "Nope" );
    }
}
于 2012-11-14T14:39:05.767 に答える
0

Controller.TempData 以外の別の実行可能なソリューションは、Cookie の使用です。

于 2012-11-14T14:36:52.810 に答える
0

それを行う最良の方法はクッキーだと思います。このアプローチは、アプリケーションの RESTfulness を維持するのに役立ちます。つまり、サーバーに保存されたデータはありません

于 2012-11-14T14:37:03.067 に答える