【问题标题】:LinkButton doesn't Postback on first click in asp.net?LinkBut​​ton 在 asp.net 中第一次单击时不会回发?
【发布时间】:2013-10-10 09:59:39
【问题描述】:

我有一个.aspx 网页,上面添加了一个UserControl。在UserControl 中,当LinkButtonclicked 它在第一次尝试时不会Postback。但是当我们再次click 时它会执行Postback 然后只有页面重定向不知道为什么?

有什么想法吗?

在 .ASPX 标记中:

 <asp:LinkButton ID="lnkCheckOut" runat="server" 
                        CssClass="button orange" onclick="lnkCheckOut_Click">Checkout</asp:LinkButton>

In.cs 文件:

protected void lnkCheckOut_Click(object sender, EventArgs e)
    {
        if (Session["UserID"] != null)
        {
            lnkCheckOut.PostBackUrl = "~/checkout.aspx?type=checkout";
            //Response.Redirect("~/checkout.aspx?type=checkout");
            Session["IsQuoteAdded"] = "false";
        }
        //if not logged in user
        else
        {
           lnkCheckOut.PostBackUrl = "~/login.aspx?returnUrl="+HttpUtility.UrlEncode(Request.RawUrl);
        }
    }

当我在第一次点击时在浏览器中看到标记(在 Chrome 中使用 F12)时,它会显示:

<a id="ctl00_ContentPlaceHolder1_shpCart_lnkCheckOut" class="button orange" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$shpCart$lnkCheckOut','')">Checkout</a>

第二次点击时:

<a id="ctl00_ContentPlaceHolder1_shpCart_lnkCheckOut" class="button orange" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$shpCart$lnkCheckOut", "", false, "", "login.aspx?returnUrl=%2fNew%2fMyBox.aspx", false, true))'>Checkout</a>

注意:我没有在网页或用户控件中使用任何 UpdatePanel。

帮助赞赏!

【问题讨论】:

  • 我不知道为什么会这样,但另一种方法是在 javascript 中链接按钮的 onclick 事件中使用 __doPostback 函数。
  • 嗨 Neelam,但是会话验证呢?
  • 我遇到了这种问题,这是我在找不到其他任何东西时最终使用的解决方案。您还需要在 .aspx 页面中添加 EnableEventValidation = false。我不确定会话验证。你应该解决这个问题,把我的建议作为最后的手段。

标签: c# asp.net postback linkbutton


【解决方案1】:

您的代码不会重定向它刚刚分配 URL 的页面。使用下面的代码来纠正它。

protected void lnkCheckOut_Click(object sender, EventArgs e)
{
    if (Session["UserID"] != null)
    {
        //lnkCheckOut.PostBackUrl = "~/checkout.aspx?type=checkout";
       Session["IsQuoteAdded"] = "false";
        Response.Redirect(@"~/checkout.aspx?type=checkout");

    }
    //if not logged in user
    else
    {
       Response.Redirect(@"~/login.aspx?returnUrl="+HttpUtility.UrlEncode(Request.RawUrl));
    }
}

【讨论】:

  • 嗨@Avinash Jha,我已经在上面的评论中提到它不起作用
【解决方案2】:

在您的标记中,没有 PostBackUrl。所以在第一次点击时,它实际上会返回到同一个页面,并且你的事件处理程序会运行。

然后,在您的事件处理程序中,您将设置 PostBackUrl。

因此,当有人第二次点击该链接时,它将发布到该 URL。您的代码按设计工作:)

编辑:我建议更改为 Response.Redirect,但很难确切知道您的代码应该做什么。

【讨论】:

  • 嗨@pattermeister,那么您对处理这种情况有什么建议?我们可以在aspx 条件markp 中做到这一点吗?任何示例代码帮助表示赞赏!也尝试使用 Response.Redirect() 但无法在发布的代码中如此评论!还有什么?
【解决方案3】:

我面临同样的问题。 我在网格视图中有链接按钮。当我单击链接按钮时,它不会在第一次单击时回发,但是当我再次单击时它会。 然后我正确检查了我的代码,然后我发现网格视图被放置在更新面板中,因此它不会在第一次点击时回发。

所以我建议请检查一下。

【讨论】:

  • 更有可能是对其他帖子的评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2020-12-05
  • 1970-01-01
相关资源
最近更新 更多