我们有一个由前员工在Visual 2008中创建的网页,允许访问者登录。
最近,我们的一位营销人员上了网页设计课。在课堂上,这个人制作了一个漂亮的网站,作为Visual 2010类项目的一部分。
现在它被抛在我身上,让它工作,我不知道现有的网站是如何运作的。我有Visual的两种风格,所以这不是问题。
现在,我正在试图了解我们以前的网页设计师是如何实现LoginView控件的。
在某种程度上,Web.config文件中的条目会影响LoginView控件对帐户进行身份验证的位置。
为了保持代码尽可能的简短和“切中要害”,我将尽可能地删减那些看起来不需要的代码。
我们的Web.config文件有以下条目:
<configuration>
<system.web>
<membership defaultProvider="CustomizedProvider">
<providers>
<clear/>
<add name="CustomizedProvider" type="System.Web.Security.SqlMembershipProvider" requiresUniqueEmail="false" connectionStringName="SqlASPNETDB" applicationName="JP2CODE" enablePasswordRetrieval="True" enablePasswordReset="True" passwordFormat="Clear" requiresQuestionAndAnswer="False" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0"/>
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="ProfileProvider" applicationName="JP2CODE" connectionStringName="SqlASPNETDB" type="System.Web.Profile.SqlProfileProvider"/>
</providers>
</profile>
<roleManager enabled="true" defaultProvider="CustomRoleProvider">
<providers>
<clear/>
<add connectionStringName="SqlASPNETDB" applicationName="JP2CODE" name="CustomRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
<webParts>
<personalization defaultProvider="SqlPersonalizationProvider">
<providers>
<add name="SqlPersonalizationProvider" type="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider" connectionStringName="SqlASPNETDB" applicationName="JP2CODE"/>
</providers>
<authorization>
<allow verbs="enterSharedScope" users="test,?"/>
</authorization>
</personalization>
</webParts>
</system.web>
</configuration>注意:我修改了applicationName字段,这样就不会在不知不觉中泄露一些安全信息。
那么,我是否将这个Web.config文件信息直接复制到新项目中呢?我们的营销人员的网络项目有许多自定义条目在Web.config文件中,我并不真正理解,我不想对破坏它负责。
如果我更改了PublicKeyToken,是否需要创建一个新的applicationName
在现有的母版页中,登录例程包含在asp:Login标记中:
<asp:Login ID="Login1" BackColor="#e7e0c5" Width="170px" VisibleWhenLoggedIn="False"
runat="server" FailureText='Invalid UserName/Password.'>
<LayoutTemplate>
<div style="width:181px;">
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Login ID:</asp:Label>
<asp:TextBox ID="UserName" runat="server" Width="150px"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" ErrorMessage="Required<br />" ValidationGroup="ctl00$Login1">*</asp:RequiredFieldValidator>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" TextMode="Password" Width="150px"></asp:TextBox><br />
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" ErrorMessage="Required<br />" ValidationGroup="ctl00$Login1">*</asp:RequiredFieldValidator>
<asp:CheckBox ID="RememberMe" runat="server" Text="Remember" />
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="ctl00$Login1" /><br />
<asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
</div>
</LayoutTemplate>
</asp:Login>我不知道ValidationGroup="ctl00$Login1"是什么,或者我是否可以在新版本中使用它。
在市场部给我的原型母版页面中,登录例程非常不同。我不知道如何使它工作,或如果营销人员插入的东西,将不起作用。它更分散了一点:
<div style="width:181px;">
<asp:LoginName ID="LoginName1" runat="server" FormatString="Welcome {0}!" />
<asp:LoginView ID="LoginView2" runat="server">
<LoggedInTemplate>
<asp:LinkButton ID="LinkButton1" Font-Underline="true" PostBackUrl="~/ManageProfile.aspx" runat="server">Manage Profile</asp:LinkButton>
</LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="LoginStatus1" Font-Underline="true" LoginText="" LogoutAction="Refresh" runat="server" />
</div>
<h3>Log In</h3>
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Login ID="Login1" BackColor="#E7E0C5" Width="170px" VisibleWhenLoggedIn="false"
runat="server" FailureText='Invalid UserName/Password.' >
</asp:Login>
</AnonymousTemplate>
<LoggedInTemplate>
Welcome <asp:LoginName ID="LoginName1" runat="server" /><br /><br />
<asp:LoginStatus ID="LoginStatus1" runat="server" /><br />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/ManageProfile.aspx">Manage Profile</asp:HyperLink>
</LoggedInTemplate>
</asp:LoginView>这个新版本有一些不同的字段。我是实现这些,还是在不使用自定义登录时使用这些默认控件?
发布于 2012-01-26 19:46:52
您的任务是将现有站点(asp.net 3.5)替换为一个新站点(asp.net 4.0 -可能)。
不幸的是,这说起来容易做起来容易。假设新应用程序不是高度解耦的,那么您必须进行一些重构才能使其正常工作。重构的数量取决于新站点的开发人员如何实现数据访问等。
您应该做什么:
此时,您应该将重点放在将新应用程序指向存储成员资格和配置文件提供程序的服务器上,然后是身份验证。
当您通过这个测试时,就会在您的盒子上做一些很好的旧集成测试,以识别问题并开始处理这些问题。
回答您的问题:
那么,我是否将这个Web.config文件信息直接复制到新项目中呢?
我不推荐。非常小心,将每一个元素从原始复制到新元素。您应该主要关注的是connectionStrings、authentication、membership和profile提供者元素。这些是你想从旧的移植到新的。也许还有其他的--从这些开始。
如果我更改了PublicKeyToken,是否需要创建一个新的applicationName?
不要改变applicationName。您的成员资格提供程序在数据库中使用该功能。如果在配置文件中更改它,则需要在db中更改它。
我不知道ValidationGroup=“ctl00$Login1 1”是什么,或者我是否可以在新版本中使用它。
现在不要担心这个问题,只需使用新应用程序的实现(因为它太棒了!)
这个新版本有一些不同的字段。我是实现这些,还是在不使用自定义登录时使用这些默认控件?
更新版本中的Login控件在登录后将显示用户名及其状态。Login控件具有模板,用于为匿名用户(未登录的用户)和登录用户呈现不同的布局。看起来他们有两组,指向同一页。一种可能是在服务器上执行一些不同的代码,具体取决于单击了哪个Manage链接。
暂时把他们留在原地。
来自此帖子的链接可能会帮助您完成其中的一些工作。
希望这能有所帮助。
https://stackoverflow.com/questions/9022522
复制相似问题