2015-06-11 35 views
0

我已经广泛研究了Google和此站点,并且找不到答案。我正在尝试将ASP.NET标识添加到Visual Studio,并且我一直在使用this page在VB中使用ASP.NET标识

问题是,该文章中的所有内容都在C#中,而我的项目特别在Visual Basic中(ASP.NET Framework 4.5.1,而不是 MVC)。另外,我对Web开发人员太陌生,无法确切知道要改变什么。我发现了一个C#到VB转换器,它的大部分工作,但我仍然失去了一些东西,因为我得到了VS内的错误。即使我不明白为什么,我甚至不能100%确定我能够使用VB代替C#工作。

我想尽可能保持简洁,所以我将在中加上大写字母

这是register.aspx页:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body style="font-family: Arial, Helvetica, sans-serif; font-size: small"> 
    <form id="form1" runat="server"> 
    <div> 
     <h4 style="font-size: medium">Register a new user</h4> 
     <hr /> 
     <p> 
      <asp:Literal runat="server" ID="StatusMessage" /> 
     </p>     
     <div style="margin-bottom:10px"> 
      <asp:Label runat="server" AssociatedControlID="UserName">User name</asp:Label> 
      <div> 
       <asp:TextBox runat="server" ID="UserName" />     
      </div> 
     </div> 
     <div style="margin-bottom:10px"> 
      <asp:Label runat="server" AssociatedControlID="Password">Password</asp:Label> 
      <div> 
       <asp:TextBox runat="server" ID="Password" TextMode="Password" />     
      </div> 
     </div> 
     <div style="margin-bottom:10px"> 
      <asp:Label runat="server" AssociatedControlID="ConfirmPassword">Confirm password</asp:Label> 
      <div> 
       <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" />     
      </div> 
     </div> 
     <div> 
      <div> 
       <asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" /> 
      </div> 
     </div> 
    </div> 
    </form> 
</body> 
</html> 

在VB中没有错误,但在运行页面后,我得到在浏览器中的“分析器错误”:“分析器错误信息:未能加载键入'WebFormsIdentity.Register'。“

这是背后的代码;大部分的问题都与此页:

Imports Microsoft.AspNet.Identity 
Imports Microsoft.AspNet.Identity.EntityFramework 
Imports System.Linq 

Namespace WebFormsIdentity 
    Partial Public Class Register 
     Inherits System.Web.UI.Page 
     Protected Sub CreateUser_Click(sender As Object, e As EventArgs) 
      ' Default UserStore constructor uses the default connection string named: DefaultConnection 
      Dim userStore = New UserStore(Of IdentityUser)() 
      Dim manager = New UserManager(Of IdentityUser)(userStore) 

      Dim user = New IdentityUser() With { _ 
       Key .UserName = UserName.Text _ 
      } 
      Dim result As IdentityResult = manager.Create(user, Password.Text) 

      If result.Succeeded Then 
       StatusMessage.Text = String.Format("User {0} was created successfully!", user.UserName) 
      Else 
       StatusMessage.Text = result.Errors.FirstOrDefault() 
      End If 
     End Sub 
    End Class 
End Namespace 

在根据“暗淡用户”行,字键“”有此错误:

Name of field or property being initialized in an object initializer must start with '.'.

在与'行昏暗的结果 '字 '密码' 有这样:

'Password' is not declared. It may be inaccessible due to its protection level

上线下' result.S ucceeded”,字 'StatusMessage' 有这样:

'StatusMessage' is not declared. It may be inaccessible due to its protection level.

最后,同一行, 'user.UserName' 有这样:

'UserName' is not a member of 'System.Security.Principal.IPrincipal'.

我只是一直在使用VB进行大约六个星期,所以我是一个婴儿开发。我知道如何声明,但我不明白为什么上面的链接作者不需要在代码中做任何额外的事情,除了它是C#。

无论如何,感谢您阅读和提前协助。

回答

2

我能解决我的问题。步骤:

1)完全卸载VS 2013高级版
2)安装了VS 2013终极
3)当开始一个新的项目,而不是使用一个空的模板,我选择了“Web窗体”使用默认的“单个用户帐户'认证。
4)从NuGet包安装'Microsoft ASP.NET Identity EntityFramework'

运行应用程序,然后正常工作;我能够注册一个用户没有任何错误。

为了将来的参考,正确的代码如下。请注意,'Owin'引用必须导入。

Register.aspx:

<%@ Page Title="Register" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="Register.aspx.vb" Inherits="WebFormsIdentity.Register" %> 

<%@ Import Namespace="WebFormsIdentity" %> 
<%@ Import Namespace="Microsoft.AspNet.Identity" %> 
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> 
    <h2><%: Title %>.</h2> 
    <p class="text-danger"> 
     <asp:Literal runat="server" ID="ErrorMessage" /> 
    </p> 

    <div class="form-horizontal"> 
     <h4>Create a new account</h4> 
     <hr /> 
     <asp:ValidationSummary runat="server" CssClass="text-danger" /> 
     <div class="form-group"> 
      <asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-2 control-label">Email</asp:Label> 
      <div class="col-md-10"> 
       <asp:TextBox runat="server" ID="Email" CssClass="form-control" TextMode="Email" /> 
       <asp:RequiredFieldValidator runat="server" ControlToValidate="Email" 
        CssClass="text-danger" ErrorMessage="The email field is required." /> 
      </div> 
     </div> 
     <div class="form-group"> 
      <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label> 
      <div class="col-md-10"> 
       <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" /> 
       <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" 
        CssClass="text-danger" ErrorMessage="The password field is required." /> 
      </div> 
     </div> 
     <div class="form-group"> 
      <asp:Label runat="server" AssociatedControlID="ConfirmPassword" CssClass="col-md-2 control-label">Confirm password</asp:Label> 
      <div class="col-md-10"> 
       <asp:TextBox runat="server" ID="ConfirmPassword" TextMode="Password" CssClass="form-control" /> 
       <asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword" 
        CssClass="text-danger" Display="Dynamic" ErrorMessage="The confirm password field is required." /> 
       <asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword" 
        CssClass="text-danger" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." /> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" CssClass="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
</asp:Content> 

Register.aspx.vb:

Imports System 
Imports System.Linq 
Imports System.Web 
Imports System.Web.UI 
Imports Microsoft.AspNet.Identity 
Imports Microsoft.AspNet.Identity.EntityFramework 
Imports Microsoft.AspNet.Identity.Owin 
Imports Owin 

Partial Public Class Register 
    Inherits Page 
    Protected Sub CreateUser_Click(sender As Object, e As EventArgs) 
     Dim userName As String = Email.Text 
     Dim manager = Context.GetOwinContext().GetUserManager(Of ApplicationUserManager)() 
     Dim signInManager = Context.GetOwinContext().Get(Of ApplicationSignInManager)() 
     Dim user = New ApplicationUser() With {.UserName = userName, .Email = userName} 
     Dim result = manager.Create(user, Password.Text) 
     If result.Succeeded Then 
      ' For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 
      ' Dim code = manager.GenerateEmailConfirmationToken(user.Id) 
      ' Dim callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request) 
      ' manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=""" & callbackUrl & """>here</a>.") 

      signInManager.SignIn(user, isPersistent := False, rememberBrowser := False) 
      IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response) 
     Else 
      ErrorMessage.Text = result.Errors.FirstOrDefault() 
     End If 
    End Sub 
End Class 
2

好的。 首先删除单词“KEY” - 它来自Telerik转换器 - 我不知道原因。其次。在您的HTML代码上重复ID = UserName和ID =密码win name =“UserName”和name =“Password” 希望这会有所帮助。

+0

谢谢!我会给它一个镜头,让你知道。 – Wullaj

+0

如果我能'upvote'你的答案,我会的。 “关键”参考绝对是一个问题。感谢您的帮助! – Wullaj