【问题标题】:Modifying edited field of a DetailsView before inserting it to database when in "insert mode"在“插入模式”下,在将 DetailsView 的已编辑字段插入数据库之前对其进行修改
【发布时间】:2013-11-20 19:48:23
【问题描述】:

在我最后一年的项目页面上,我有一个 DetailsView,我用它来更新/编辑 GridView。

我有一个必须显示哈希密码的密码字段。

当我在 DetailsView 中处于“编辑”或“插入”模式并在字段中插入新密码(或编辑字段)时,我想在 GridView/DetailsView 中显示密码之前直接对密码进行哈希处理当然,在将其插入/更新到数据库之前。

我的 GridView 和 DetailsView 都在同一个 UpdatePanel 中,我使用的是 ObjectDataSource。

那部分代码:

<asp:DetailsView ID="DetailsViewSingleUsr" runat="server" Height="50px" 
        Width="125px" DataSourceID="SingleUserObjectDataSource" DataKeyNames="id" 
            onitemdeleted="DetailsViewSingleUsr_ItemDeleted" 
            oniteminserted="DetailsViewSingleUsr_ItemInserted" 
            onitemupdated="DetailsViewSingleUsr_ItemUpdated" AutoGenerateRows="False" 
            oniteminserting="DetailsViewSingleUsr_ItemInserting">
        <Fields>
            <asp:TemplateField HeaderText="User ID" InsertVisible="False" 
                SortExpression="id">
                <EditItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Eval("id") %>'></asp:Label>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label8" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="UserName" SortExpression="username">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("username") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("username") %>'></asp:TextBox>
                    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
                        ControlToValidate="TextBox1" Display="Dynamic" 
                        ErrorMessage="Username may only contain alphanumeric characters" 
                        ValidationExpression="^[a-zA-Z0-9_]*$" SetFocusOnError="True"></asp:RegularExpressionValidator>
                    <asp:CustomValidator ID="CustomValidator1" runat="server" 
                        ErrorMessage="UserName already exist." SetFocusOnError="True" Display="Dynamic" 
                        ControlToValidate="TextBox1" onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="First Name" SortExpression="firstname">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("firstname") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("firstname") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("firstname") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Last Name" SortExpression="lastname">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("lastname") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("lastname") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("lastname") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Password" SortExpression="pass">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("pass") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("pass") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label5" runat="server" Text='<%# Bind("pass") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Last Score" SortExpression="currentScore">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("currentScore") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("currentScore") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label6" runat="server" Text='<%# Bind("currentScore") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Best Score" SortExpression="maxScore">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("maxScore") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server" Text='<%# Bind("maxScore") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label7" runat="server" Text='<%# Bind("maxScore") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField ShowHeader="False">
                <EditItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="True" 
                        CommandName="Update" ImageUrl="~/images/update.png" />
                    &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
                        CommandName="Cancel" ImageUrl="~/images/cancel.png" />
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="True" 
                        CommandName="Insert" ImageUrl="~/images/insert.png" />
                    &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
                        CommandName="Cancel" ImageUrl="~/images/cancel.png" />
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" 
                        CommandName="Edit" ImageUrl="~/images/edit.png" />
                    &nbsp;<asp:ImageButton ID="ImageButton2" runat="server" CausesValidation="False" 
                        CommandName="New" ImageUrl="~/images/new.png"/>
                    &nbsp;<asp:ImageButton ID="ImageButton3" runat="server" CausesValidation="False" 
                        CommandName="Delete" ImageUrl="~/images/delete.png"/>
                </ItemTemplate>
                <ControlStyle Height="20px" Width="20px" />
            </asp:TemplateField>
        </Fields>
    </asp:DetailsView>

我可以使用该代码访问“ItemInserting”事件后面代码中的密码文本框:

protected void DetailsViewSingleUsr_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
    DetailsView myDetailsView = (DetailsView)sender;
    if (myDetailsView.CurrentMode == DetailsViewMode.Insert)
    {
        Label9.Text = ((TextBox)myDetailsView.FindControl("TextBox4")).Text;

    }
}

但是我该如何修改呢?我走对了吗?有什么建议吗?

谢谢很多人!

【问题讨论】:

    标签: asp.net gridview data-binding detailsview


    【解决方案1】:

    ListViewInsertEventArgs 包含属性Values,您可以在其中找到从控件获取的所有插入值。您可以只修改这些数据。例如

    e.Values["password"] = "newpassword";
    

    【讨论】:

      【解决方案2】:

      谢谢!我终于得到了这段代码:

      protected void DetailsViewSingleUsr_ItemInserting(object sender, DetailsViewInsertEventArgs e)
      {
          e.Values["pass"] = LoginSecurityLogic.Hash_Password_to_MD5(e.Values["pass"].ToString());
      }
      
      protected void DetailsViewSingleUsr_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
      {
              e.NewValues["pass"] = LoginSecurityLogic.Hash_Password_to_MD5(e.NewValues["pass"].ToString());
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多