【问题标题】:getting error when editing the user details编辑用户详细信息时出错
【发布时间】:2011-06-30 20:32:25
【问题描述】:

我正在尝试编辑和更新选定用户的详细信息,按照教程http://www.4guysfromrolla.com/articles/052307-1.aspx

我在 VS 2010 的错误列表中得到以下错误:

错误 6“评论”不是 'System.Security.Principal.IPrincipal'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx.vb 21 9 C:\projects\FPOS_v2\

错误 5“电子邮件”不是 'System.Security.Principal.IPrincipal'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx.vb 20 9 C:\projects\FPOS_v2\

错误 2 'FamilyAdmin_edit_user.Private Sub DeleteUser(sender As Object, e As System.EventArgs)' 不可访问 在这种情况下,因为它是 '私人的'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx 140

错误 1 ​​'FamilyAdmin_edit_user.Private Sub UnlockUser(sender As Object, e As System.EventArgs)' 不可访问 在这种情况下,因为它是 '私人的'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx 138

错误 7 'IsApproved' 不是成员 的 'System.Security.Principal.IPrincipal'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx.vb 22 9 C:\projects\FPOS_v2\

错误 8 'UnlockUser' 不是成员 的 'System.Security.Principal.IPrincipal'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx.vb 88 9 C:\projects\FPOS_v2\

错误 4 属性“用户”是 '只读'。 C:\projects\FPOS_v2\FamilyAdmin\edit_user.aspx.vb 11 9 C:\projects\FPOS_v2\

edit_user.aspx 的代码是:

<table class="webparts">
<tr>
    <th>User Information</th>
</tr>
<tr>
<td class="details" valign="top">

<h3>Roles:</h3>
<asp:CheckBoxList ID="UserRoles" runat="server" />

<h3>Main Info:</h3>
<asp:DetailsView AutoGenerateRows="False" DataSourceID="MemberData"
  ID="UserInfo" runat="server" OnItemUpdating="UserInfo_ItemUpdating"
  >

<Fields>
    <asp:BoundField DataField="UserName" HeaderText="User Name" ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem">
    </asp:BoundField>
    <asp:BoundField DataField="Email" HeaderText="Email" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem"></asp:BoundField>
    <asp:BoundField DataField="Comment" HeaderText="Comment" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem"></asp:BoundField>
    <asp:CheckBoxField DataField="IsApproved" HeaderText="Active User" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem" />
    <asp:CheckBoxField DataField="IsLockedOut" HeaderText="Is Locked Out" ReadOnly="true" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem" />

    <asp:CheckBoxField DataField="IsOnline" HeaderText="Is Online" ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem" />
    <asp:BoundField DataField="CreationDate" HeaderText="CreationDate" ReadOnly="True"
     HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem"></asp:BoundField>
    <asp:BoundField DataField="LastActivityDate" HeaderText="LastActivityDate" ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem">
    </asp:BoundField>
    <asp:BoundField DataField="LastLoginDate" HeaderText="LastLoginDate" ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem">
    </asp:BoundField>
    <asp:BoundField DataField="LastLockoutDate" HeaderText="LastLockoutDate" ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem"></asp:BoundField>
    <asp:BoundField DataField="LastPasswordChangedDate" HeaderText="LastPasswordChangedDate"
    ReadOnly="True" HeaderStyle-CssClass="detailheader" ItemStyle-CssClass="detailitem"></asp:BoundField>
    <asp:CommandField ButtonType="button" ShowEditButton="true" EditText="Edit User Info" />
</Fields>
</asp:DetailsView>
<div class="alert" style="padding: 5px;">
<asp:Literal ID="UserUpdateMessage" runat="server">&nbsp;</asp:Literal>
</div>


<div style="text-align: right; width: 100%; margin: 20px 0px;">
<asp:Button ID="Button1" runat="server" Text="Unlock User" OnClick="UnlockUser" OnClientClick="return confirm('Click OK to unlock this user.')" />
&nbsp;&nbsp;&nbsp;
<asp:Button ID="Button2" runat="server" Text="Delete User" OnClick="DeleteUser" OnClientClick="return confirm('Are Your Sure?')" />
</div>


<asp:ObjectDataSource ID="MemberData" runat="server" DataObjectTypeName="System.Web.Security.MembershipUser" SelectMethod="GetUser" UpdateMethod="UpdateUser" TypeName="System.Web.Security.Membership">
    <SelectParameters>
        <asp:QueryStringParameter Name="username" QueryStringField="username" DefaultValue="zora" />
    </SelectParameters>
</asp:ObjectDataSource> 
</td>

</tr></table>

edit_user.aspx.vb 的代码是我得到错误的地方:

Partial Class FamilyAdmin_edit_user
    Inherits System.Web.UI.Page

    Private username As String

    Private Sub Page_Load()
        username = Request.QueryString("username")
        If username Is Nothing OrElse username = "" Then
            Response.Redirect("users.aspx")
        End If
        User = Membership.GetUser(username)

        UserUpdateMessage.Text = ""
    End Sub

    Protected Sub UserInfo_ItemUpdating(ByVal sender As Object, ByVal e As DetailsViewUpdateEventArgs)
        'Need to handle the update manually because MembershipUser does not have a
        'parameterless constructor  

        User.Email = DirectCast(e.NewValues(0), String)
        User.Comment = DirectCast(e.NewValues(1), String)
        User.IsApproved = CBool(e.NewValues(2))

        Try
            ' Update user info:
            Membership.UpdateUser(User)

            ' Update user roles:
            UpdateUserRoles()

            UserUpdateMessage.Text = "Update Successful."

            e.Cancel = True
            UserInfo.ChangeMode(DetailsViewMode.[ReadOnly])
        Catch ex As Exception
            UserUpdateMessage.Text = "Update Failed: " + ex.Message

            e.Cancel = True
            UserInfo.ChangeMode(DetailsViewMode.[ReadOnly])
        End Try
    End Sub

    Private Sub Page_PreRender()
        ' Load the User Roles into checkboxes.
        UserRoles.DataSource = Roles.GetAllRoles()
        UserRoles.DataBind()

        ' Disable checkboxes if appropriate:
        If UserInfo.CurrentMode <> DetailsViewMode.Edit Then
            For Each checkbox As ListItem In UserRoles.Items
                checkbox.Enabled = False
            Next
        End If

        ' Bind these checkboxes to the User's own set of roles.
        Dim userRoles__1 As String() = Roles.GetRolesForUser(username)
        For Each role As String In userRoles__1
            Dim checkbox As ListItem = UserRoles.Items.FindByValue(role)
            checkbox.Selected = True
        Next
    End Sub

    Private Sub UpdateUserRoles()
        For Each rolebox As ListItem In UserRoles.Items
            If rolebox.Selected Then
                If Not Roles.IsUserInRole(username, rolebox.Text) Then
                    Roles.AddUserToRole(username, rolebox.Text)
                End If
            Else
                If Roles.IsUserInRole(username, rolebox.Text) Then
                    Roles.RemoveUserFromRole(username, rolebox.Text)
                End If
            End If
        Next
    End Sub

    Private Sub DeleteUser(ByVal sender As Object, ByVal e As EventArgs)
        'Membership.DeleteUser(username, false); // DC: My apps will NEVER delete the related data.
        Membership.DeleteUser(username, True)
        ' DC: except during testing, of course!
        Response.Redirect("manage_members.aspx")
    End Sub

    Private Sub UnlockUser(ByVal sender As Object, ByVal e As EventArgs)
        ' Dan Clem, added 5/30/2007 post-live upgrade.

        ' Unlock the user.
        User.UnlockUser()

        ' DataBind the GridView to reflect same.
        UserInfo.DataBind()
    End Sub

End Class

问题在于用户。但我不知道如何排序,因为我对这一切都是新手。

任何帮助将不胜感激..

谢谢

【问题讨论】:

    标签: asp.net vb.net asp.net-membership


    【解决方案1】:

    因为您忘记定义 MembershipUser 即

    Partial Class FamilyAdmin_edit_user
         Inherits System.Web.UI.Page      
    Private username As String      
    Dim User As MembershipUser
    
    Private Sub Page_Load()
    .....
    

    目前它正在将用户视为“System.Security.Principal.IPrincipal”而不是 MembershipUser。

    【讨论】:

    • 感谢您的及时回复。谢谢删除错误。但是,现在当尝试更新记录时,我收到以下错误:对象引用未设置为对象的实例。在以下行:第 22 行:user.Email = DirectCast(e.NewValues(0), String)
    • 这可能是因为它可能无法找到您要更新的用户。即 User = Membership.GetUser(username) 可能返回 null。在该行设置断点并在方法调用后检查 User 是否为 null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多