Asp.net按钮点击事件和MVC



当第一次点击按钮更改按钮文本时,第二次点击重定向到其他页面-

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都会被重新初始化,否则块永远不会执行。为了保持clickCount状态,我可能会使用视图状态、会话状态、应用程序状态、隐藏字段或JS代码等。对于这种特殊情况,什么是最好的->问题1。

由于MVC是无状态的,并且类似的代码也是在控制器中编写的,所以每次实例化ActionHandler或控制器时都会重新初始化clickCount。在ASP.NET MVC->Ques中,您如何处理类似的情况。2

创建一个模型以传递到带有属性的视图中:

public int ClickCount{get;set;}

然后在视图中,创建一个隐藏值

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

在控制器上的后事件期间,更新型号

public ActionResult(ViewModel model){
model.ClickCount++;
}

如果我想跟踪按钮点击情况,我会使用谷歌分析。如果我想在自己的应用程序中跟踪它们,我会使用数据库(只需在提交或单击时更新数据库记录)。如果我没有/不能使用数据库,你可以创建一个隐藏字段,并通过点击按钮的次数不断更新它,比如:

控制器:

<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.

问题1

取决于:

  • 你需要在应用程序的其他地方使用这个点击计数吗
  • 这个数字是合理的信息吗
  • 如果用户看到这个计数,会有问题吗

IMO,最好的解决方案是保持对视图状态的计数,但它可能会根据上述问题而改变。

问题2

这将是非常不同的。首先,你不会有"按钮点击事件",你会从控制器中获得(或发布)一个动作。因此,正如你所看到的,这将需要一种完全不同的方法。

附带说明:请记住,不是只有MVC是无状态的。HTTP在设计上是无状态的。

这可能不是解决这个问题的最佳方案,但它应该会让您走上正轨。

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。)

相关内容

  • 没有找到相关文章

最新更新