简体   繁体   English

在“插入模式”下,在将DetailsView的已编辑字段插入数据库之前,先对其进行修改

[英]Modifying edited field of a DetailsView before inserting it to database when in “insert mode”

On one of my final year project page I have a DetailsView that I am using to update/edit a GridView. 在我最后一年的项目页面之一上,我有一个DetailsView,用于更新/编辑GridView。

I have a password field that must show the hashed password. 我有一个密码字段,必须显示哈希密码。

When I am in "edit" or "insert" mode in the DetailsView and inserting a new password in the field (or editing the field) I would like to hash directly the password before showing it in the GridView/DetailsView and of course before inserting/updating it in the DataBase. 当我在DetailsView中处于​​“编辑”或“插入”模式并在字段中插入新密码(或编辑字段)时,我想直接散列该密码,然后在GridView / DetailsView中显示它,当然还要在插入之前/在数据库中更新它。

My GridView & DetailsView are both in the same UpdatePanel and I am using a ObjectDataSource. 我的GridView和DetailsView都在同一UpdatePanel中,并且我使用的是ObjectDataSource。

That a partial code: 那部分代码:

<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>

I am able to access the password textbox in the code behind in the "ItemInserting" Event with that code: 我可以使用该代码访问“ 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;

    }
}

But how can I modify? 但是我该如何修改? Am I on the right way? 我走对了吗? Any suggestions? 有什么建议么?

Thx a lot guys! 谢谢很多人!

ListViewInsertEventArgs contains property Values , in which you can find all of inserting values, obtained from controls. ListViewInsertEventArgs包含属性Values ,在其中您可以找到从控件获得的所有插入值。 You may just modify those data. 您可以只修改那些数据。 For example 例如

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

Thanks! 谢谢! I've finally end up with this code: 我最终以以下代码结束:

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());

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从DetailsView插入模式将图像上传到数据库 - Upload Image to Database From DetailsView Insert Mode 处于DetailsView插入模式的验证器 - Validators in DetailsView insert mode 单击插入时,DetailsView Web控件不会更改为插入模式 - DetailsView web control does not change to insert mode when insert is clicked ASP.NET DetailsView更改字段显示的编辑诗句插入模式 - ASP.NET DetailsView changing field display for edit verses insert mode 在插入模式下,插入/提交新记录不适用于DetailsView - Insert/submit new record not working on detailsview in insert mode 在视图中编辑记录时,数据库表中的字段为空 - Field in database table are nullified when record is edited in view 在插入模式下从 DetailsView 获取值到 FormView 文本框 - Get value from DetailsView to FormView Textbox in insert mode 在编辑模式下将选定的gridview值传递到detailsview模板字段 - Pass selected gridview value to detailsview template field in edit Mode 取消时,DetailsView的插入事件中没有代码运行 - No Code running in the Inserting-Event of DetailsView when cancelling detailsview&gt;插入&gt;密码字段上应保存它的md5哈希 - detailsview > on insert > password field should save md5 hash of it instead
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM