【问题标题】:Add postbackurl as a attribute to button将 postbackurl 作为属性添加到按钮
【发布时间】:2013-10-14 15:49:59
【问题描述】:

我有一个按钮,OnClick 将一些文本存储到数据库中的表中。

所有这些都在 asp.net 中使用 c# 和 .NET Framework 4.0。

但是,我需要这样,当单击时,按钮执行OnClick 方法,现在正在做的事情,但也导航到另一个页面,继续注册。

注册表大约有 9 页,我知道如果我通过 postbackurl="url" 它会导航到另一个页面/表单,但是它不会执行 OnClick 方法。

<div style="text-align:right; margin-top:20px"><asp:Button ID="Button1" runat="server" ValidationGroup="Curriculum" postbackurl="Envia2.aspx" OnClick="Button1_Click" CssClass="my_btn" /></div>

那么,我怎样才能将此属性“附加”到OnClick 方法?

或者对于这种情况还有另一种解决方法?

提前致谢!

【问题讨论】:

    标签: c# jquery asp.net .net sql-server


    【解决方案1】:

    按钮点击事件不能在客户端同时执行 - 提交到服务器并重定向到另一个页面。

    理想情况下,您不希望将每个注册步骤都插入数据库。相反,您希望将它们存储在会话状态中。然后将它们插入到最后一页的数据库中。

    这是一个例子。确保您检查每个步骤的验证 -

    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string Other { get; set; }
    }
    
    // Page1.aspx
    <asp:Button runat="server" ID="SubmitButton" Click="SubmitButton_Click"
        Text="Continue to Step 2" />   
    
    // Page1.aspx.cs
    protected void SubmitButton_Click(object sender, EventArgs e)
    {
        var customer = new Customer
        {
            FirstName = FirstNameTexBox.Text,
            LastName = LastNameTexBox.Text
        };
        Session["Customer"] = customer;
    
        // Redirect to page 2
        Response.Redirect("Page2.aspx");
    }
    
    // Page2.aspx
    <asp:Button runat="server" ID="SubmitButton" Click="SubmitButton_Click" 
        Text="Continue to Step 3" />  
    
    // Page2.aspx.cs
    protected void SubmitButton_Click(object sender, EventArgs e)
    {
        var customer = Session["Customer"] as Customer;
        customer.Address = AddressTextBox.Text;
        Session["Customer"] = customer;
    
        // Redirect to page 3
        Response.Redirect("Page3.aspx");
    }
    
    // Page9.aspx
    <asp:Button runat="server" ID="SubmitButton" Click="SubmitButton_Click" 
        Text="Submit" /> 
    
    // Page9.aspx.cs
    protected void SubmitButton_Click(object sender, EventArgs e)
    {
        var customer = Session["Customer"] as Customer;
        customer.Other = OtherTextBox.Text;
    
        // Save customer to database.
    }
    

    【讨论】:

    • 要尝试您的解决方案,似乎 Response.Redirect 在这些情况下不起作用。稍后我会发给你,谢谢。
    • @KristianKoci 我在回答区看到了你的问题。您永远不应该使用数据访问类中的 Response.Redirect。它应该来自 System.Web.UI.Page (aspx)System.Web.UI.UserControl (ascx)
    • 所以我可以将它添加到 Button,例如在 .aspx 中?
    • 您想在 Button 的 Click 事件中使用 Response.Redirect
    • 没错,我应该这样添加吗? OnClick="Button1_Click.Response.Redirect("Envia2.aspx")" ?
    【解决方案2】:

    如果我理解你的问题,当用户点击按钮时,你需要做两件事:

    1. 调用“Button1_Click”
    2. 发布到“Envia2.apsx”

    问题在于 1. 本身就是由一个表单 post 到当前页面(你可能知道,ASP.Net 服务器控件,为了处理服务器端的事件,在幕后触发一个 postback)。所以我可以看到几个选项:

    1. 使用OnClick 并删除postbackurl -- 在点击处理程序中,重定向到“Envia2.aspx”
    2. 删除OnClickpostbackurl。相反,进行某种 Ajax 调用以调用“Button1_Click”代码,然后在完成后,在“Button1”所属的表单上调用 form.post()

    【讨论】:

    • 认为第一个选项更适合这种环境,您知道“Response.redirect”是否可以解决问题,或者我应该将哪个调用添加到 .cs 中?
    • @KristianKoci 如果您不需要任何源页面的表单数据,那么简单的Response.Redirect 应该没问题。
    • 很抱歉,如果我不需要任何源页面的表单数据,您是什么意思?我单击按钮,我有一个将所有数据存储到数据库中的功能,然后我将添加 Response.Redirect,对吗?或者它不会在db上存储任何东西? :(
    • @KristianKoci 是的,没关系 - Response.Redirect 之前的一切都正常。
    • 是的,添加到 Button_Click 事件中,现在可以完美运行了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2016-05-04
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多