C# ASP.NET成员资格-需要将自定义字段添加到管理屏幕

C# ASP.NET成员资格-需要将自定义字段添加到管理屏幕,c#,asp.net,asp.net-membership,membership,membership-provider,C#,Asp.net,Asp.net Membership,Membership,Membership Provider,我需要添加一个与登录名关联的公司名称字段。稍后,我需要将其合并到我现有的管理屏幕中以进行报告 我就是不知道该怎么做。我尝试过向成员资格表中添加列并修改存储的进程,但该列不会显示 这是我需要修改的管理页面代码 <%@ Page Language="C#" MasterPageFile="~/admin.master" %> <%@ Register TagPrefix="dc" TagName="alphalinks" Src="~/alphalinks.ascx" %>

我需要添加一个与登录名关联的公司名称字段。稍后,我需要将其合并到我现有的管理屏幕中以进行报告

我就是不知道该怎么做。我尝试过向成员资格表中添加列并修改存储的进程,但该列不会显示

这是我需要修改的管理页面代码

<%@ Page Language="C#" MasterPageFile="~/admin.master" %>
<%@ Register TagPrefix="dc" TagName="alphalinks" Src="~/alphalinks.ascx" %>

<script runat="server">
    private void Page_PreRender()
    {
        if (Alphalinks.Letter == "All")
        {
            Users.DataSource = Membership.GetAllUsers();
        }
        else
        {
            Users.DataSource = Membership.FindUsersByName(Alphalinks.Letter + "%");

        }
        Users.DataBind();
    }


</script>

<asp:Content ID="Content1" ContentPlaceHolderID="c" Runat="Server">

<!-- #include file="_nav.aspx -->

<table class="webparts">
<tr>
    <th>Users by Name</th>
</tr>
<tr>
<td class="details" valign="top">

<!-- #include file="_nav3.aspx -->


User Name filter:&nbsp;&nbsp;&nbsp;
<dc:alphalinks runat="server" ID="Alphalinks" />

<br />
    <br />

<asp:GridView runat="server" ID="Users" AutoGenerateColumns="false"
    CssClass="list" AlternatingRowStyle-CssClass="odd" GridLines="none"
    >
<Columns>
    <asp:TemplateField>
        <HeaderTemplate>User Name</HeaderTemplate>
        <ItemTemplate>
        <a href="edit_user.aspx?username=<%# Eval("UserName") %>"><%# Eval("UserName") %></a>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField DataField="email" HeaderText="Email" />

    <asp:BoundField DataField="comment" HeaderText="Comments" />
    <asp:BoundField DataField="creationdate" HeaderText="Creation Date" />
    <asp:BoundField DataField="lastlogindate" HeaderText="Last Login Date" />
    <asp:BoundField DataField="lastactivitydate" HeaderText="Last Activity Date" />
    <asp:BoundField DataField="isapproved" HeaderText="Is Active" />
    <asp:BoundField DataField="isonline" HeaderText="Is Online" />
    <asp:BoundField DataField="islockedout" HeaderText="Is Locked Out" />
</Columns>
</asp:GridView>

</td>

</tr></table>


</asp:Content>

私有无效页_PreRender()
{
如果(Alphalinks.Letter==“全部”)
{
Users.DataSource=Membership.GetAllUsers();
}
其他的
{
Users.DataSource=Membership.FindUsersByName(Alphalinks.Letter+“%”);
}
Users.DataBind();
}
谢谢你在这方面的帮助

谢谢,


Steve

编辑:不要修改存储的过程或使用成员资格提供程序创建的表。这是自找麻烦。您需要做的是添加一个概要文件提供程序,它扩展了标准用户信息

原始答复: 请阅读Scott Guthrie的这篇文章: 它是关于表配置文件提供程序的,它比开箱即用的提供程序要好得多


这一条也是:

Steve,您是否从custom
MembershipProvider
返回一个定制的
成员身份用户
,该用户是您用适当的值构建的,要执行此操作,需要实现该用户

如果没有,那么

如果是这样,您将需要强制转换成员资格的结果,因为它的返回类型是股票成员资格用户,即使您返回的是派生类型

类似于

Users.DataSource = Membership.GetAllUsers().Cast<MyMembershipUser>();
Users.DataSource=Membership.GetAllUsers().Cast();

丹尼尔,我知道你的意图,但你绝不会以国家的名义来解决这个问题。抱歉--1.问题是他们想将公司名称与用户的登录名相关联。如果您已经在使用成员资格提供程序,则ProfileProvider是标准的asp.net方法。它们是齐头并进的。你可以随心所欲地打蜡修正主义者,丹尼尔,这并不能改变你最初的答案是不符合逻辑的事实。您后来添加的建议是有效的,但不要假装您给出了一个连贯的答案。如果您认为在任何情况下,将自定义字段添加到成员身份而不是配置文件都是没有意义的,那么您就错了。如果你要向提问者指出与他们明确要求相反的方向,你应该提供的不仅仅是“不要那样做”,这是很公平的。我不太懂你的英语,但我已经更新了我的帖子,以反映我对原文的修改。这样可以吗?似乎我必须重写我的大部分页面才能添加一个字段?这看起来真的很糟糕。没有比这更简单的方法了?谢谢你的帮助,我只是有点沮丧,因为我想更好地理解这一点。@steve-好吧,daniel建议使用配置文件,我在某些情况下同意,这取决于额外数据的随意性和敏感性。如果您描述了要与用户关联的字段类型,以及为什么在第一种情况下选择“成员资格”而不是“个人资料”,这将有助于澄清问题。我只需要一个或两个字段。1是客户名称,另一个是表示密码有效天数的值。我选择会员资格是因为我开始用这种方式编码。没有其他原因,因为我对这一切都很陌生。@steve-嗯,客户名称是配置文件的候选名称,但与密码相关的任何内容都不是,应该与密码一起存储,作为会员数据。所以你也可以把另一个领域也包括进去,因为这会减少工作量。@steve-准备好进行另一次冒险,并按照我答案()中的链接进行操作。