范围文本模式的ASP.net文本框不断重置其值

时间:2019-06-12 14:23:11

标签: c# asp.net textbox

嗨,我正在忙着创建一个asp.net项目,该项目需要从用户那里获取三个值。我正在使用带有范围文本模式的文本框来获取这些值,并且用户第一次移动滑块时,它可以完美工作,但是此后,用户将无法再调整任何文本框。

我尝试使用滑块扩展器,但这似乎不起作用,仅显示一个文本框。

我的html代码创建显示值的文本框和标签

body>
<form id="form1" runat="server">
            <p>
                Quantum 1 Length:&nbsp;&nbsp;
                <asp:TextBox ID="txtVal1" runat="server" TextMode="Range" min="1" Max="8" OnTextChanged="txtVal1_TextChanged1" AutoPostBack="True"></asp:TextBox>
                &nbsp;&nbsp;&nbsp;
                <asp:Label ID="lblVal1" runat="server" Text="/////"></asp:Label>

            </p>

            <p>
                Quantum 2 Length:&nbsp;&nbsp;
                <asp:TextBox ID="txtVal2" runat="server" TextMode="Range" min="1" Max="8" OnTextChanged="txtVal2_TextChanged1" AutoPostBack="True"></asp:TextBox>
                &nbsp;&nbsp;&nbsp;
                <asp:Label ID="lblVal2" runat="server" Text="/////"></asp:Label>
            </p>
            <p>
                Quantum 3 Length:&nbsp;&nbsp;
                <asp:TextBox ID="txtVal3" runat="server" TextMode="Range" min="1" Max="8" AutoPostBack="True" OnTextChanged="txtVal3_TextChanged1"></asp:TextBox>
                &nbsp;&nbsp;&nbsp;
                <asp:Label ID="lblVal3" runat="server" Text="/////"></asp:Label>
            </p>
            <p>
                <asp:Button ID="btnNext" runat="server" AutoPostBack="true" Height="24px" OnClick="btnNext_Click" style="margin-left: 0px" Text="Next" Width="150px" />
                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <script type="text/javascript" __designer:mapid="129">

               function NextPage() {
                                    window.open('Execution.aspx', 'Execution');
                                 }
</script>
                <asp:Label ID="lblError" runat="server" ForeColor="Red" Text="Invalid input; Please ensure that Quantum 1 &lt;= Quantum 2 &lt;= Quantum 3" Visible="False"></asp:Label>
            </p>
</form>
 </body>

我的C#代码用于控制框并更改其值

 public partial class Quantums : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            txtVal1.Text = HttpContext.Current.Session["Q1"].ToString();
        }
        catch { }

        try
        {
            txtVal2.Text = HttpContext.Current.Session["Q2"].ToString();
        }
        catch { }

        try
        {
            txtVal3.Text = HttpContext.Current.Session["Q3"].ToString();
        }
        catch { }

        lblVal1.Text = txtVal1.Text;
        lblVal2.Text = txtVal2.Text;
        lblVal3.Text = txtVal3.Text;

        //UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger() { ControlID = "btnNext" });
    }


protected void txtVal1_TextChanged1(object sender, EventArgs e)
    {
        HttpContext.Current.Session["Q1"] = txtVal1.Text;
    }

然后是文本框2和3的相同代码。所有三个按钮都启用了有关为何文本框vaklue保持重置和自动回发的任何建议。

1 个答案:

答案 0 :(得分:0)

我刚刚发现您不见了if(Page.IsPostBack()) return;。您的问题是,每次更改文本框时,都会执行“ Page_Load”事件,然后是相应的事件处理程序(请参见page life cycle)。因此,您将文本设置为会话,然后将会话设置为文本,实际上什么也没做。

至少在目前,您实际上不需要Page_load方法中的该页面任何内容。请尝试以下操作:

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void txtVal1_TextChanged(object sender, EventArgs e)
    {
        Session["Q1"] = txtVal1.Text;
        lblVal1.Text = txtVal1.Text;
    }

    protected void txtVal2_TextChanged(object sender, EventArgs e)
    {
        Session["Q2"] = txtVal2.Text;
        lblVal2.Text = txtVal2.Text;
    }

    protected void txtVal3_TextChanged(object sender, EventArgs e)
    {
        Session["Q3"] = txtVal3.Text;
        lblVal3.Text = txtVal2.Text;
    }

然后可以使用相应的会话值访问用户输入值。例如:

    protected void Submit(object sender, EventArgs e)
    {
        List<string> answers = new List<string>();
        answers.Add(Session["Q1"].ToString());
        answers.Add(Session["Q2"].ToString());
        answers.Add(Session["Q3"].ToString());

        // Do stuff with answers
    }