0

詳細ビューを利用して、いくつかのレベルのユーザー認証用の編集機能を提供しようとしています。基本的に、レベル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;
}
4

1 に答える 1

0

DetailsView コントロールの自動更新、削除、および挿入機能を動作させるには、DataKeyNames プロパティを設定する必要があります。

一部のフィールドを変更しない場合は更新中に、それらをキーに入れることができます。

if (User.IsInRole("yyy") || User.IsInRole("xxx))
{
    OfficialProfileInfo.Fields[2].Visible = true;
    OfficialProfileInfo.Fields[3].Visible = true;
}
else
{
    OfficialProfileInfo.DataKeyNames = "Level4Date"
}

注: DataKeyNames は、フィールド名のカンマ区切りのリストです/

于 2012-09-27T03:51:54.770 に答える