2013-03-14 133 views
0

我正在将我的sitefinity网站项目转换为Web应用程序。当前上下文中不存在“电子邮件”名称(Web应用程序)

我们有一个最初在网站上工作的用户控件,但现在我们在构建Web应用程序时出现以下错误。

“电子邮件”并不在当前环境中存在的名称(线104)

using System; 
using System.Collections.Generic; 
using System.Text.RegularExpressions; 
using System.Web.Security; 
using System.Net.Mail; 
using Telerik.Sitefinity.Security; 
using Telerik.Sitefinity.Security.Model; 
using Telerik.Sitefinity.Model; 


namespace UserControls.Saville 
{ 

    public partial class CustomUserRegistration : System.Web.UI.UserControl 
    { 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Request.Url.Query.Contains("?registered")) 
      { 
       userRegistration.Visible = false; 
       RegSuccess.Text = "We have emailed you an account activation link. Please check your emails."; 
      } 
     } 

     protected void btnRegister_OnClick(object sender, EventArgs e) 
     { 
      Match emailValid = Regex.Match(tbxRegEmail.Text, @"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@" 
                   + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]? 
                  [0-9]{1,2}|25[0-5]|2[0-4][0-9])\." 
                   + @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]? 
                  [0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" 
                   + @"([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$"); 
      if (tbxFirstName.Text != String.Empty && 
       tbxSurname.Text != String.Empty && 
       tbxJobTitle.Text != String.Empty && 
       tbxOrganisation.Text != String.Empty && 
       tbxTelephone.Text != String.Empty && 
       tbxAddressLine1.Text != String.Empty && 
       tbxAddressCity.Text != String.Empty && 
       tbxAddressPostcode.Text != String.Empty && 
       tbxAddressCounty.Text != String.Empty && 
       tbxAddressCountry.Text != String.Empty && 
       tbxRegEmail.Text != String.Empty && 
       tbxRegUsername.Text != String.Empty && 
       tbxRegPassword.Text != String.Empty && 
       tbxCPassword.Text != String.Empty && 
       emailValid.Success && 
       tbxRegPassword.Text.Length > 5 && 
       tbxRegPassword.Text == tbxCPassword.Text) 
      { 
       var manager = UserManager.GetManager("AspNetSqlMembershipProvider"); 
       manager.Provider.SuppressSecurityChecks = true; 

       if (manager.UserExists(tbxRegUsername.Text)) 
       { 
        RegError.Text = "Username already in use."; 
       } 
       else 
       { 
        if (manager.EmailExists(tbxRegEmail.Text)) 
        { 
         RegError.Text = "Email Address is already registered"; 
        } 
        else 
        { 
         MembershipCreateStatus status; 
         User user = manager.CreateUser(tbxRegUsername.Text, tbxRegPassword.Text, tbxRegEmail.Text, "Question", "Answer", false, null, out status); 

         manager.SaveChanges(); 

         if (status == MembershipCreateStatus.Success) 
         { 
          UserProfileManager profileManager = UserProfileManager.GetManager(); 
          profileManager.Provider.SuppressSecurityChecks = true; 

          SitefinityProfile userProfile = profileManager.CreateProfile(user, Guid.NewGuid(), typeof(SitefinityProfile)) as SitefinityProfile; 
          if (userProfile != null) 
          { 
           userProfile.SetValue("Title", ddlTitle.SelectedItem.Text); 
           userProfile.FirstName = tbxFirstName.Text; 
           userProfile.LastName = tbxSurname.Text; 
           userProfile.SetValue("JobTitle", tbxJobTitle.Text); 
           userProfile.SetValue("Organisation", tbxOrganisation.Text); 
           userProfile.SetValue("MainPhone", tbxTelephone.Text); 
           userProfile.SetValue("MobilePhone", tbxMobileTelephone.Text); 
           userProfile.SetValue("Address_Street_1", tbxAddressLine1.Text); 
           userProfile.SetValue("Address_Street_2", tbxAddressLine2.Text); 
           userProfile.SetValue("Address_City", tbxAddressCity.Text); 
           userProfile.SetValue("Address_PostcodeZIP", tbxAddressPostcode.Text); 
           userProfile.SetValue("Address_CountyState", tbxAddressCounty.Text); 
           userProfile.SetValue("Address_Country", tbxAddressCountry.Text); 
           userProfile.SetValue("Registration_Code", tbxRegCode.Text); 
           userProfile.SetValue("SendMarketing", chkbxMaterials.Checked); 
           profileManager.SaveChanges(); 

           RoleManager roleManager = RoleManager.GetManager("AspNetSqlRoleProvider"); 
           roleManager.Provider.SuppressSecurityChecks = true; 
           Role untrained = roleManager.GetRole("Untrained"); 
           roleManager.AddUserToRole(user, untrained); 

           roleManager.SaveChanges(); 

           String emailContent = String.Format("{1}, <br/><br/>Your registration is nearly complete.<br/><br/>Please follow this link to activate your account:<br/><a href='{2}/login?ID={3}'>{2}/login?ID={3}</a>", Environment.NewLine, tbxFirstName.Text, Request.Url.GetLeftPart(UriPartial.Authority), user.Id.ToString()); 
           Email.Send(tbxRegEmail.Text, "[email protected]*****.com", "*****", emailContent); 

           Response.Redirect("~/login?registered"); 
          } 

          RegError.Text = "An error occurred whilst registering. If problem persists please contact [email protected]*****.com"; 
         } 
        } 
       } 
      } 
      else 
      { 
       RegError.Text = "Please check all required fields have been filled and are valid."; 
      } 
     } 
    } 
} 

本来我们有项目中的不同的文件夹内的Email.cs文件,但似乎是Web应用程序无法找到此。

+0

添加一个完全Quilified名称的电子邮件类像Mynamespace.Email.Send(.....) – JSJ 2013-03-14 11:55:39

+0

不幸的是,我已经尝试过这一点,但我们只是得到同样的错误,但这次是'MYnamespace'.Email。发送(... – LaurenceP 2013-03-14 12:05:07

+1

只需确认:您是否验证过电子邮件的名称空间(在Email.cs中)是否正确,并且该类是公共的? – Kjartan 2013-03-14 12:26:24

回答

1

我可能会推荐一个稍微不同的解决方案来发送电子邮件。使用MailDefinitionMailMessage类创建电子邮件的正文,然后从此处使用类别EmailSender以及Sitefinity中的SMTP设置发送电子邮件。下面的示例代码:

using System.Net.Mail; 
using Telerik.Sitefinity.Services; 
using Telerik.Sitefinity.Web.Mail; 
using Telerik.Sitefinity.Configuration; 

var smtpSettings = Config.Get<SystemConfig>().SmtpSettings; 
MailDefinition mailDef = new MailDefinition() 
{ 
    IsBodyHtml = true, 
    BodyFileName = "~/Files/EmailBody.html", 
    Subject = "Thanks for Commenting!", 
    From = !smtpSettings.DefaultSenderEmailAddress.IsNullOrEmpty() ? smtpSettings.DefaultSenderEmailAddress : smtpSettings.UserName 
}; 
MailMessage email = mailDef.CreateMailMessage(this.EmailControl.Value.ToString(), new ListDictionary(), this); 
EmailSender.Get().Send(email); 

ListDictionary正在用代码中的值替换正文中的值。如果你不需要,你可以只包含一个空字典。

+0

嗨,大家好,感谢您的帮助,我明白了。在将网站转换为webapp时,我必须编译email.cs,而不是将它留在“内容”中。有些东西太简单了,但我无法找到答案的年龄! – LaurenceP 2013-03-15 09:24:25

相关问题