2015-06-11 2 views
0

Я исследовал Google и этот сайт широко и не могу найти ответ. Я пытаюсь добавить ASP.NET Identity в Visual Studio, и я работал от this page.Использование идентификатора ASP.NET с VB

Проблема в том, что все из этой статьи находится на C#, а мой проект специально написан на Visual Basic (ASP.NET Framework 4.5.1, не MVC). Кроме того, я слишком новичок в веб-разработчике, чтобы точно знать, что менять. Я нашел конвертер C# в VB, и он работал по большей части, но я все еще не вижу чего-то, так как получаю ошибки в VS. Я даже не уверен на 100%, что могу заставить Identity работать в 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, но после после запуска страницы я получаю «Ошибка синтаксического анализа» в браузере: "Parser Сообщение об ошибке: Не удалось загрузить type '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 

На линии под «пользователя Dim», слово «Key» имеет эту ошибку:

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 Forms» с по умолчанию «Индивидуальный учетной записи пользователя ' Аутентификация.
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

OK. Сначала удалите слово «KEY» - оно исходит от конвертера Telerik - я не знаю причины. Второй. На ваш код HTML дубликат ID = имя_пользователя и идентификатор = пароль win name = "UserName" и name = "Password" Надеюсь, это поможет.

+0

Спасибо! Я дам вам шанс и дам вам знать. – Wullaj

+0

Если бы я мог «поддержать» ваш ответ, я бы это сделал. Ссылка на «ключ» была определенно проблемой. Спасибо за помощь! – Wullaj

Смежные вопросы