【问题标题】: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?”,其中的共识是“不,他们不应该”。
  • 那么逻辑上我的标题应该只写“基于用户输入”;)
  • 没有。反对意见是在您的标题中添加“元数据”。
  • 您可以简单地将查询字符串中的电子邮件和密码传递给注册页面,并在注册页面的页面加载事件中访问它并填写文本框/

标签: asp.net webforms textbox autofill


【解决方案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 信息:
    1. 在源页面中,包含一个表单元素,该元素包含 HTML 元素(例如 input 或 textarea)或 ASP.NET 服务器控件(例如 TextBox 或 DropDownList 控件),它们会在提交表单时发布值。
    2. 在目标页面中,读取 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}
猜你喜欢
  • 1970-01-01
  • 2011-03-14
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多