我正在尝试使用详细信息视图,并为几个级别的用户授权提供编辑功能。基本上,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;
}
答案 0 :(得分:0)
您必须设置DataKeyNames属性才能使DetailsView控件的自动更新,删除和插入功能生效。
在更新某些字段不应更改时,您可以将它们放入密钥中。
if (User.IsInRole("yyy") || User.IsInRole("xxx))
{
OfficialProfileInfo.Fields[2].Visible = true;
OfficialProfileInfo.Fields[3].Visible = true;
}
else
{
OfficialProfileInfo.DataKeyNames = "Level4Date"
}
注意: DataKeyNames是以逗号分隔的字段名称列表/