0

我的 FormView 的 EditItemTemplate 中有以下代码:

<tr id="primaryGroupRow" runat="server">
  <td class="Fieldname">Primary Group:</td>
  <td><asp:DropDownList ID="iPrimaryGroupDropDownList" runat="server" DataSourceID="GroupDataSource" CssClass="PageText" 
DataTextField="sGroupName" DataValueField="iGroupID" SelectedValue='<%# Bind("iPrimaryGroup") %>'></asp:DropDownList></td>
</tr>

如果我删除了表行的 runat="server",那么 iPrimaryGroup 字段将 100% 绑定并正确传递给业务逻辑层。但是,在上面的代码中,它的传递值为零。

谁能告诉我这是为什么或如何解决它?这是在需要隐藏此表行的控件中,具体取决于管理员或普通用户是否正在对其进行编辑。即:某些字段仅供管理员写入,如果用户不是管理员,我想从视图中隐藏控件。

4

3 回答 3

1

如果安全是一个问题,也许这可能会更好

<tr>
  <td colspan='2'>
    <asp:panel runat='server' visible='<%= IsUserAdmin %>'>
      <table>
        <tr>
          <td class="Fieldname">Primary Group:</td>
          <td><asp:DropDownList ID="iPrimaryGroupDropDownList" runat="server" DataSourceID="GroupDataSource" CssClass="PageText" DataTextField="sGroupName" DataValueField="iGroupID" SelectedValue='<%# Bind("iPrimaryGroup") %>'></asp:DropDownList>
          </td>
        </tr>
      </table>
   </asp:panel>
 </td>

如果我没记错的话,如果 visible=false,面板中的任何标记都不会被呈现

于 2009-11-11T23:13:53.870 回答
0

试一试:

删除 runat=server 属性

定义一个 CSS 类

.hidden{ display:hidden;}

然后根据用户是否为管理员设置类属性

<tr class='<%= if(IsUserAdmin) "" else "hidden" %>' >
于 2009-11-11T16:02:35.787 回答
0

似乎此功能是设计使然,尽管尚未完全确认。

http://weblogs.asp.net/rajbk/archive/2009/08/03/formview-binding-gotcha.aspx

使用 FormView 对象时,如果您有一个嵌套控件,那么双向数据绑定将无法正常工作。您可以访问代码中的控件,也可以获取数据,但它不会像预期的那样自动更新业务逻辑层 (BLL) 后端的值。

幸运的是,有一种解决方法。让它工作的方法是为 ItemUpdating 创建一个事件。它将有这样的签名:

protected void frmProfile_ItemUpdating(object sender, FormViewUpdateEventArgs e)

这使您可以访问 FormViewUpdateEventArgs,这反过来又允许您在 ObjectDataSource 值运行时以及在它们到达您的 BLL 代码之前对其进行更改,如下所示:

protected void frmProfile_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
    if (frmProfile.FindControl("iPrimaryGroupDropDownList") != null)
    {
        DropDownList iPrimaryGroupDropDownList = ((DropDownList)frmProfile.FindControl("iPrimaryGroupDropDownList"));
        e.NewValues["iPrimaryGroup"] = iPrimaryGroupDropDownList.Text;
    }
}
于 2009-11-13T04:58:08.457 回答