詳細ビューを利用して、いくつかのレベルのユーザー認証用の編集機能を提供しようとしています。基本的に、レベル1のユーザーは事前定義されたフィールドのセットを更新できませんが、レベル2のユーザーはこれらのフィールドを更新できます。visible=false
を定義するときにフィールドをに設定するだけEditTemplate
で、DataBind
認証をテストしvisible=true
、ユーザーがフィールドを更新する権限を持っているかどうかを確認しました(以下のコード例を参照)。レベル1のユーザーが更新を許可されているフィールドを更新すると、データベースでフィールドが(上書きされて)visible=false
設定されることに気付いた以外は、魅力のように機能しました。null
そのため、ビューなどを複製する必要がないように、さまざまなオプションを試しています。
コードスニペット:aspx...。
<asp:TemplateField HeaderText="<%$ Resources:Resource, Level %>"
SortExpression="LevelId">
<EditItemTemplate>
<asp:DropDownList ID="LevelList" runat="server"
DataTextField="LevelDesc" DataValueField="LevelId">
</asp:DropDownList>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Right" />
</asp:TemplateField>
<asp:TemplateField HeaderText="<%$ Resources:Resource, Level1 %>"
SortExpression="Level1Date" Visible="false" >
<EditItemTemplate>
<asp:TextBox ID="Level1" runat="server" Text='<%#
Bind("Level1Date", "{0:d}") %>' />
<asp:CompareValidator ID="CompareValidator1" runat="server"
ErrorMessage="Please enter a valid date (m/d/y)"
ControlToValidate="Level1" Operator="DataTypeCheck"
Type="Date" Display="Dynamic">
</asp:CompareValidator>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Right" />
</asp:TemplateField>
<asp:TemplateField HeaderText="<%$ Resources:Resource, Level2 %>"
SortExpression="Level2Date" Visible="false" >
<EditItemTemplate>
<asp:TextBox ID="Level2" runat="server" Text='<%#
Bind("Level2Date", "{0:d}") %>' />
<asp:CompareValidator ID="CompareValidator2" runat="server"
ErrorMessage="Please enter a valid date (m/d/y)"
ControlToValidate="Level2" Operator="DataTypeCheck"
Type="Date" Display="Dynamic">
</asp:CompareValidator>
</EditItemTemplate>
<HeaderStyle HorizontalAlign="Right" />
</asp:TemplateField>
<asp:TemplateField HeaderText="<%$ Resources:Resource, Level4 %>"
SortExpression="Level4Date" Visible="false" >
<EditItemTemplate>
<asp:TextBox ID="Level4" runat="server" Text='<%#
Bind("Level4Date", "{0:d}") %>' />
</Fields>
aspx.cs SNIPPET
<name>_DataBound(object sender, EventArgs e)
{
.
.
.
if (User.IsInRole("yyy") || User.IsInRole("xxx))
{
OfficialProfileInfo.Fields[2].Visible = true;
OfficialProfileInfo.Fields[3].Visible = true;
}