2012-07-03 31 views
5

MVC3アプリケーションにコンボボックスがあります。新しいアイテムが選択されると、それは私が望むようにポストバックを行います。そこにすべていい。このプロセスでは、クエリ文字列をポップアップして読み込みます。ページが更新されると、クエリ文字列が読み込まれ、必要に応じて他のコントロールが設定されます。ページがポストバックの結果であるかどうかを検出する方法

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

しかし、サイトの新しいユーザーはそれを知りませんし、ちょうど混乱を見るでしょう。

MVC3のアプリケーションはASP.Netと同じisPostbackを持っていないことを理解していますが、私が理解できないさまざまな理由から、何らかの形で「accaptable」とは考えられません。

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

私はこれを行うこと他のポストのを見てきました:

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

を私はこれは常に真実であることを他の場所をお読みください。したがって、これが常に真実であれば、最初のロードでも真であり、そうであれば、それがポストバックかどうかを確実に伝えることはできません。私はもちろん、それはある種のポストバックです。しかし、それが最初の負荷の場合ではありません。

誰でもこの回答をお願いします。また、標準のaspxビューエンジンとは対照的に、Razorビューエンジンを使用しています。

+0

asp.net mvc –

+0

には「ポストバック」がありませんあなたのアクションをどのようにコーディングしているのか興味深いでしょう。これを検出する最も一般的な方法は次のとおりです.GETは初めてのリクエスト(つまりポストバックではない)であり、POSTはポストバックになることは明らかです –

+0

あなたはまだWebフォームアーキテクチャでアプリケーションについて考えています。これはBad™です。 MVC3のチュートリアルをチェックしてください。 – Tyrsius

答えて

14

適切な属性を持つアクションを飾ることができ、あなたは通常、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のようなプロパティについて心配する必要はありません。

+0

実際、これは理にかなっています!ここ数カ月間、私は2つの場所で多くのコードが繰り返されたので、これらの属性を削除しました。説明ありがとう。事実上、私はこれを言って殺されることを知っている。しかし、これを知りたければ、IsPostBackプロパティをシミュレートすることができます。しかし、なぜ私は今必要がないのか分かります。 –

4

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

public ActionResult Foo() 
{ 
    if (string.Equals("post", Request.HttpMethod, StringComparison.OrdinalIgnoreCase) 
    { 
     // The POST verb was used to invoke the controller action 
    } 
    ... 
} 
+0

私はこれが好きです(今はstring.equalsの使い方を学びました)。今は、なぜmyString == someOtherStringではなくstring.equalsを使用するのかを理解するだけです。しかし、あなたが私にトラブルを保存しない限り、別の質問があります。あなたの答え、+1をありがとう。 –

3

あなたはMVCで

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

[HttpPost] 
public ActionResult Foo() { 
    //Do postback stuff here 
} 
+0

あなたの答えをありがとう。私は受け入れられた答えとしてこれを使用していたが、他の誰かが少し良い説明を提供した。しかし、私はあなたの時間に感謝しています。 +1 –

+1

@jsmith 'Foo'がすでに同じコンテキストに存在するというエラーを返すでしょうか? – lbrahim

+0

+1 to @ Md.Ibrahim答えは同じ過負荷のために間違っています。Foo()のシグネチャを区別することができるように、メソッドの1つでFoo()のシグネチャを変更する必要があります。 – joedotnot