好的,我有这个场景。我有一个Register.aspx用于注册新用户。我正在使用CreateUserWizard。我希望用户只使用公司的电子邮件进行注册。因此,我在显示域的电子邮件文本框旁边放置了一个标签,这意味着用户不再需要键入域。 我的HTML看起来像这样:
<asp:TextBox ID="Email" runat="server" CssClass="textEntry1"></asp:TextBox>
<asp:Label ID="lblEmail" runat="server" Text="@domain.com"></asp:Label>
所以我将标签添加到textbox.text的方法如下:
protected void RegisterUser_CreatingUser(object sender, EventArgs e)
{
TextBox _txtEmailAddress = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Email");
Label _lblEmailAddress = (Label)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("lblEmail");
_txtEmailAddress.Text = _txtEmailAddress.Text + _lblEmailAddress.Text;
}
我正在使用OnCreatingUser事件来执行此操作。
_txtEmailAddress.Text将具有用户输入的电子邮件的完整值以及我已修复的域部分。我希望将其更新到电子邮件字段中,以便将其正确存储到数据库中。
但是当我调试代码时,我意识到RegisterUser.Email
仍然拥有没有域名的电子邮件。而不是像“myemail@domain.com”这样的东西,我只是存储了“myemail”。不确定我是否正确的方向只是为了将自己的域添加到他们的电子邮件中。很可能不是。任何指针都会非常感激。
答案 0 :(得分:2)
您需要设置CreateUserWizard
控件的.Email
property,而不是TextBox
的值。这实际上是在后端传递给MembershipProvider的CreateUser
方法。
像这样:
protected void RegisterUser_CreatingUser(object sender, EventArgs e)
{
TextBox _txtEmailAddress = (TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("Email");
Label _lblEmailAddress = (Label)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("lblEmail");
// Set the email property of the CreateUserWizard control to append the domain
RegisterUser.Email = _txtEmailAddress.Text + _lblEmailAddress.Text;
}