根据用户输入自动填充文本框

Posted

技术标签:

【中文标题】根据用户输入自动填充文本框【英文标题】:autofill textbox based on user input 【发布时间】:2014-01-30 03:51:40 【问题描述】:

我对 ASP.NET 非常陌生,遇到了一个我还没有弄清楚的问题。在我的 Default.aspx 页面上,我有一个用户可以注册的地方。这只需要字段 - 电子邮件和密码。当点击提交按钮时,他们会进入 Signup.aspx,它会显示一个更大的注册表单,其中包含用户名、电子邮件、密码、确认密码等字段。我想用那些自动填充我的电子邮件和密码文本框用户输入的 Default.aspx 页面。这可能吗?我正在使用 Microsoft Visual Web Developer 2010 Express。

【问题讨论】:

我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 那么逻辑上我的标题应该只写“基于用户输入”;) 没有。反对意见是在您的标题中添加“元数据”。 您可以简单地将查询字符串中的电子邮件和密码传递给注册页面,并在注册页面的页面加载事件中访问它并填写文本框/ 【参考方案1】:

有多种方法可以做到这一点。

一种方法是使用 querystring 导航到喜欢:

http://example.com/Signup.aspx?email=value1&password=value2

并获得 Signup.aspx Page_Load 事件的价值,例如:

String email = Request.QueryString["email"];

String password = Request.QueryString["password"];

并分配给您的文本框控件,例如:

txtEmail.text =email;

txtPassword=password;

但在查询字符串中以明文形式发布密码并不是一个好习惯。

另一种方法是从源页面获取 HTTP POST 信息:
    在源页面中,包含一个表单元素,该元素包含 html 元素(例如 input 或 textarea)或 ASP.NET 服务器控件(例如 TextBox 或 DropDownList 控件),它们会在提交表单时发布值。 在目标页面中,读取 Form 集合,该集合返回名称/值对的字典,每个发布的值对应一对。例如

//

void Page_Load(object sender, EventArgs e)

    System.Text.StringBuilder displayValues = 
        new System.Text.StringBuilder();
    System.Collections.Specialized.NameValueCollection 
        postedValues = Request.Form;
    String nextKey;
    for(int i = 0; i < postedValues.AllKeys.Length; i++)
    
        nextKey = postedValues.AllKeys[i];
        if(nextKey.Substring(0, 2) != "__")
        
            displayValues.Append("<br>");
            displayValues.Append(nextKey);
            displayValues.Append(" = ");
            displayValues.Append(postedValues[i]);
        
    
   Label1.Text = displayValues.ToString();

最好的最简单的我认为是使用Session

在 Default.aspx 的 Submitbutton_click 事件中,将值保存到 Session 中,例如:

Session["Email"] = txtEmail.text;

Session["Password"]=txtPassword.text;

并检索 Signup.aspx Page_load 事件上的值,例如:

string email = (string)(Session["Email"]);

string password = (string)(Session["Password"]);

并分配给您的控件/文本框,例如:

txtEmail.text =email;

txtPassword=password;

还有更多方法可以从上一页检索值,例如 PreviousPage.FindControl("txtEmail"),但我从不喜欢它们。

【讨论】:

我的代码出了什么问题?在我的默认页面上,在 submitbutton_click 事件处理程序中,我有: Session("Email") = TextBoxEmail.Text 然后在我的注册页面,在 onload 处理程序中,我有: Dim Email As String = Session("Email") /n NewTextBoxEmail.Text = 电子邮件。它没有像我期望的那样在文本框中显示文本。 当我使用调试器时,它给了我这个错误:对象引用未设置为对象的实例。 您需要将会话中的值转换为其相应的数据类型,并在使用会话之前检查 null,例如 if(Session["Email"]!=null &amp;&amp; !string.IsNullOrEmpty((string)Session["Email"]))\\Do your stuff

以上是关于根据用户输入自动填充文本框的主要内容,如果未能解决你的问题,请参考以下文章

HTML 输入自动填充占位符

用户输入值时如何从文本框中填充消息框?

Flutter 中的自动填充文本字段

MS Access:如何使此文本框根据查询自动填充值?

通过用户表单替换自动填充的文本

通过用户表单替换自动填充的文本