1

最初にボタンのテキストを変更するためにボタンをクリックすると、2 回目のクリックで他のページにリダイレクトされます -

public partial class _Default : System.Web.UI.Page
{
    int clickCount;
    protected void btn_clicked(object sender, EventArgs e)
    {
        clickCount++;
        if (clickCount == 1)
            (sender as Button).Text = "go to landing page";
        else
            Response.Redirect("LandingPage.aspx");
    }
}

明らかなように、ページがリロードされるたびに clickCount が再初期化され、else ブロックが実行されることはありません。clickCount の状態を維持するために、ビュー ステート、セッション ステート、アプリケーション ステート、非表示フィールド、または JS コードなどを使用できます。この特定のケースに最適なもの -> Ques 1.

MVC はステートレスであり、コントローラーにも同様のコードが記述されているため、ActionHandler またはコントローラーがインスタンス化されるたびに clickCount が再初期化されます。ASP.NET MVC -> Ques で同様の状況をどのように処理しますか。2

4

4 に答える 4

3

プロパティを使用してビューに渡すモデルを作成します。

public int ClickCount{get;set;}

次に、ビューで非表示の値を作成します

@Html.HiddenFor(f=>f.ClickCount)

コントローラーでのポスト イベント中に、モデルを更新します。

public ActionResult(ViewModel model){
model.ClickCount++;
}
于 2012-09-13T19:25:28.377 に答える
2

ボタンのクリックを追跡したい場合は、Google アナリティクスを使用します。自分のアプリケーション内でそれらを追跡したい場合は、データベースを使用します (送信またはクリック時にデータベース レコードを更新するだけです)。データベースを使用しなかった/使用できなかった場合は、隠しフィールドを作成して、ボタンのクリック数で更新し続けることができます。

コントローラ:

<HttpPost()>
Function MyFormPost(Optional ByVal clicks As Integer = 0) As ActionResult
  ViewBag.Clicks += clicks
  Return View()
End Function

意見:

@Using Html.BeginForm()
    @Html.ValidationSummary(True)
    @Html.Hidden("clicks", ViewBag.Clicks)
End Using

注: これは VB.NET です。

于 2012-09-13T19:28:43.347 に答える
1

これは、この問題に対する最善の解決策ではないかもしれませんが、正しい方向に進むはずです。

public partial class _Default : System.Web.UI.Page
{
    protected void btn_clicked(object sender, EventArgs e)
    {
        int clickCount;
        try
        {
            clickCount = int.Parse(Session["ClickCount"]);
            clickCount++;
        }
        catch
        {
            clickCount = 1; 
        }

        Session["ClickCount"] = clickCount;

        if (clickCount == 1)
        {
            (sender as Button).Text = "go to landing page";
        }
        else
        {
            Response.Redirect("LandingPage.aspx");
        }
    }
}

Session を使用すると、ユーザーがページを離れて戻ってきても持続します。(特定の時間枠内のみ。より長く持続させたい場合は、Cookie を使用してください。)

于 2012-09-13T19:26:34.797 に答える
1

質問1

依存:

  • このクリック数をアプリケーションの他の場所で使用する必要がありますか?
  • この数は賢明な情報ですか?
  • ユーザーがこのカウントを見た場合、問題はありますか?

IMO、最善の解決策はviewstateのカウントを維持することですが、上記の質問に従って変更される場合があります。

質問2

それは非常に異なるでしょう。まず、「ボタンクリックイベント」はなく、コントローラーからアクションを取得(または投稿) します。したがって、ご覧のとおり、まったく異なるアプローチが必要になります。

補足: ステートレスなのは MVC だけではないことに注意してください。HTTP は設計上ステートレスです。

于 2012-09-13T19:24:20.157 に答える