【问题标题】:Linq Edit ListViewLinq 编辑列表视图
【发布时间】:2011-06-03 17:12:38
【问题描述】:

我正在尝试使用代码而不是向导来编辑字段。我不完全确定我拥有的代码是否可以正确更新该字段。这是我必须编辑该字段的代码:

 Protected Sub ListView1_ItemEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewEditEventArgs) Handles ListView1.ItemEditing
    ListView1.EditIndex = e.NewEditIndex
    ListView1.DataBind()
End Sub

Protected Sub ListView1_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewUpdateEventArgs) Handles ListView1.ItemUpdating
    Dim profile = Request.QueryString("Profile")
    Dim postid As Label = DirectCast(ListView1.EditItem.FindControl("postId"), Label)
    Dim textbox As TextBox = DirectCast(ListView1.EditItem.FindControl("EditPostTxt"), TextBox)
    Dim getComment = (From p In db.Posts Where p.PostId = New Guid(postid.Text)).Single

    getComment.Post = cc.reverseExchangeSmilies(textbox.Text)
    db.SubmitChanges()

    ListView1.EditIndex = -1
    cc.LoadComments(profile, ListView1)
End Sub

当我尝试更新或取消帖子时,因为帖子包含 html,我收到以下错误:

A potentially dangerous Request.Form value was detected from the client 

我想知道在更新帖子之前是否可以使用 reverseExchangeSmilies 将它们转回微笑而不是 html,或者此时可能允许使用 html。

aspx 页面:

<asp:ListView ID="ListView1" runat="server">
                                    <ItemTemplate>
                                        <div id="header">

                                            <asp:HyperLink ID="UserPageLik" runat="server" NavigateUrl='<%#"Default.aspx?Profile=" + Eval("ProfileId") %>'> <%# Eval("fullname")%> </asp:HyperLink><br />
                                        </div>
                                        <div id="leftcolumn">
                                            <asp:ImageButton ID="Image1" runat="server" ImageUrl='<%#Eval("DisaplyPictureSmall") %>' /></div>
                                        <div id="content">
                                            <asp:Label ID="Label4" runat="server" Text='<%#Eval("Post") %>'></asp:Label><br />
                                        </div>
                                        <div id="footer">
                                            <%# Eval("Date")%><br />
                                            <asp:linkbutton id="linkbutton1" runat="server" CommandName="del" CommandArgument='<%# Eval("PostId") %>' forecolor="red" text="Delete" onclientclick="return confirm('Are you sure?');" />
                                             <asp:linkbutton id="linkbutton2" runat="server" CommandName="Edit" CommandArgument='<%# Eval("PostId") %>' forecolor="red" text="Edit" />
                                        </div>
                                        <br />
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                    <div id="header">
                                        <asp:Label ID="postId" runat="server" Text='<%#Eval("PostId") %>'></asp:Label>
                                            <asp:HyperLink ID="UserPageLik" runat="server" NavigateUrl='<%#"Default.aspx?Profile=" + Eval("ProfileId") %>'> <%# Eval("fullname")%> </asp:HyperLink><br />
                                        </div>
                                        <div id="leftcolumn">
                                            <asp:ImageButton ID="Image1" runat="server" ImageUrl='<%#Eval("DisaplyPictureSmall") %>' /></div>
                                        <div id="content">
                                            <asp:TextBox ID="EditPostTxt" runat="server" Text='<%#Eval("Post") %>' Width="100%" TextMode="MultiLine"></asp:TextBox>
                                        </div>
                                        <div id="footer">
                                            <%# Eval("Date")%><br />
                                             <asp:linkbutton id="SaveEditBut" runat="server" CommandName="Update" CommandArgument='<%# Eval("PostId") %>' forecolor="red" text="Update" />
                                             <asp:linkbutton id="Linkbutton3" runat="server" CommandName="Cancel" CommandArgument='<%# Eval("PostId") %>' forecolor="red" text="Cancel" />
                                        </div>
                                        <br />
                                    </EditItemTemplate>
                                </asp:ListView>

提前致谢。

【问题讨论】:

    标签: asp.net linq listview


    【解决方案1】:

    框架阻止您发布 html 代码作为安全措施。可以通过添加页面指令来关闭当前页面。

    <%@ Page validateRequest="false" %>
    

    另一种选择是在客户端使用 javascript 在发布之前将 '' 更改为 > 和 '&' 更改为 &。然后在服务器端,您可以在将 html 写入屏幕之前对其进行解码。

    function encodeValue(element_id) 
    {   
        var elem = document.getElementById(element_id);
        var html = elem.value;
        html= html.replace(/&/gi,"&amp;");
        html= html.replace(/</gi,"&lt;");
        html= html.replace(/>/gi,"&gt;");
        elem.value = html;
    }
    

    【讨论】:

    • 我真的不想关闭安全措施,因为我不希望用户能够在那里发布 html。我有一种方法可以将所有 html 转回原始状态,即从 到:) 但我不知道该方法放在哪里。
    • @Houlahan - 是在 javascript 中将 html 转换为纯文本表情符号的方法吗?如果是这样,应该在表单的 onsubmit 事件中调用它。
    • @Houlahan - 解决方案必须在客户端,因为验证将在您有机会执行之前停止处理。我假设您正在做的是获取一些文本,例如“Hi have a nice day :)”,然后将 ':)' 替换为 '',然后将其存储在数据库中?当他们编辑值时,html最终出现在编辑框中?如果是这种情况,我要么不存储 html,而是存储输入的原始文本并在显示时转换为 html。或者在填充字段以编辑内容之前反转 html。
    • 是的,这正是我正在做的 :) 我将如何使用您提供的 JavaScript 方法?我在上面编辑了我的帖子以显示我的列表视图。谢谢
    • @Houlahan - 在您的场景中,我建议您将文本保留为输入并存储纯文本。然后作为显示代码的一部分,处理纯文本,用相关的 HTML 替换您想要的任何内容。这会成为显示问题并简化您的工作流程。
    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多