6

MVC3 アプリケーションにコンボ ボックスがあります。新しいアイテムが選択されると、私が望むようにポストバックします。大丈夫です。その過程で、クエリ文字列をポップして、ページの読み込み時に読み取ります。ページが更新されると、クエリ文字列が読み取られ、必要に応じて他のコントロールが設定されます。

ただし、ページが初めて読み込まれたときではなく、ポストバックの結果としてページが再読み込みされたときを検出する必要があります。これは、ページが最初に読み込まれるとき、誰かがコンボボックスから何かを選択するまで、すべてが台無しになるためです。

ただし、サイトへの新しいユーザーはそれを知らず、混乱するだけです.

MVC3 アプリには ASP.Net と同じ isPostback がないことを理解しています。理解できないさまざまな理由から、「許容できる」とは見なされないことはわかっています。

ただし、ASP.Net で行われたのと同じ方法で、ページの最初の読み込みとポストバックを区別する 100% 保証された信頼できる方法があるかどうかを知りたいだけです。そのような方法がある場合、それは何であり、どのように実装できますか。

私はこれを行う他の投稿を見てきました:

    public bool IsPostBack
    {
        get
        {
            return ViewBag.IsPostBack = (Request.HttpMethod == "POST");
        }
    }

しかし、私はこれが常に真実であることを他の場所で読みました。したがって、これが常に当てはまる場合は、最初のロードでも当てはまります。そのため、ポストバックかどうかは確実にわかりません。もちろん、それがある種のポストバックであることは知っています。しかし、それが最初のロードである場合はそうではありません。

誰でもこれに対する答えを手伝ってくれませんか。また、標準の aspx ビュー エンジンではなく、Razor ビュー エンジンを使用しています。

4

3 に答える 3

16

MVC では、通常、GET と POST に対して異なるアクションがあります。

[HttpGet] // Actions are GET by default, so you can omit this
public ActionResult YourAction(int id)
{
    // GET
}

[HttpPost]
public ActionResult YourAction(YourModel model)
{
    // POST
}

Page.IsPostBackこのパターンに従えば、 のようなプロパティについて心配する必要はありません。

于 2012-07-03T17:33:18.267 に答える
4

あなたが言ったように、ASP.NET MVC にはポストバックの概念はありません。冷静に行うことは、リクエストの実行に使用された HTTP 動詞をテストして、それが POST かどうかを確認することです。これは、フォーム送信後または AJAX リクエスト後のいずれかになります。

public ActionResult Foo()
{
    if (string.Equals("post", Request.HttpMethod, StringComparison.OrdinalIgnoreCase)
    {
        // The POST verb was used to invoke the controller action
    }
    ...
}
于 2012-07-03T17:27:59.437 に答える
3

適切な属性でアクションを装飾できます

[HttpGet]
public ActionResult Foo() { 
    //Do pre-postback stuff here 
}

[HttpPost]
public ActionResult Foo() { 
    //Do postback stuff here 
}
于 2012-07-03T17:33:05.157 に答える