【问题标题】:Encrypt Query string for DataNavigateUrlFormatString in Gridview在 Gridview 中加密 DataNavigateUrlFormatString 的查询字符串
【发布时间】:2019-02-02 16:20:21
【问题描述】:

我想要的是加密使用asp.net Gridview形成的查询字符串。

下面是我的代码

<asp:GridView ID="gvCreatedCRList" runat="server" AutoGenerateColumns="False" CssClass="table table-bordered table-hover"
                ShowHeaderWhenEmpty="True" PageSize="10" AllowPaging="true" EmptyDataText="No data to display.">
                <Columns>
                    <asp:HyperLinkField DataTextField="CHANGEREQUESTNUMBER" ItemStyle-CssClass="GridRow"
                        HeaderText="Change Request No" DataNavigateUrlFields="CHANGEREQUESTID" DataNavigateUrlFormatString="ChangeRequestDetails.aspx?ID={0}"
                        Text="CR No" Target="_blank" ItemStyle-Width="11%" />
                    <asp:BoundField DataField="DESCRIPTION" ItemStyle-CssClass="GridRow" HeaderText="Description"
                        ReadOnly="True" ItemStyle-Width="15%" />
                    <asp:BoundField DataField="STATENAME" ItemStyle-CssClass="GridRow" HeaderText="State"
                        ReadOnly="True" SortExpression="State" ItemStyle-Width="12%" />
                    <asp:BoundField DataField="CITYNAME" ItemStyle-CssClass="GridRow" HeaderText="City"
                        ReadOnly="True" SortExpression="City" ItemStyle-Width="7%" />
                    <asp:BoundField DataField="CATEGORY" ItemStyle-CssClass="GridRow" HeaderText="Category"
                        ReadOnly="True" SortExpression="Category" ItemStyle-Width="7%" />
                    <asp:BoundField DataField="CHANGETYPE" ItemStyle-CssClass="GridRow" HeaderText="Type"
                        ReadOnly="True" SortExpression="Type" ItemStyle-Width="15%" />
                    <asp:BoundField DataField="OPENCLOSED" ItemStyle-CssClass="GridRow" HeaderText="Open/ Closed"
                        ReadOnly="True" ItemStyle-Width="4%" />
                    <asp:BoundField DataField="STATUS" ItemStyle-CssClass="GridRow" HeaderText="Detailed Status"
                        ReadOnly="True" ItemStyle-Width="15%" />
                    <asp:BoundField DataField="CREATEDON" ItemStyle-CssClass="GridRow" HeaderText="Creation Date"
                        ReadOnly="True" DataFormatString="{0:dd-MM-yyyy}" ItemStyle-Width="7%" />
                    <asp:BoundField DataField="LASTMODIFIEDON" ItemStyle-CssClass="GridRow" HeaderText="Last Modified Date"
                        ReadOnly="True" DataFormatString="{0:dd-MM-yyyy}" ItemStyle-Width="7%" />
                </Columns>
                <HeaderStyle BackColor="#C3C1C1" />
                <RowStyle HorizontalAlign="Left" />
                <PagerStyle CssClass="pagergrid" />
            </asp:GridView>

我要加密DataNavigateUrlFormatString="ChangeRequestDetails.aspx?ID={0}"

【问题讨论】:

  • 只需使用NavigateUrl='&lt;%# this.ResolveUrl(string.Format("ChangeRequestDetails.aspx?ID={0}", Decrypt(Eval("CHANGEREQUESTID").ToString()))) %&gt;'。 (Decrypt 是自定义加密方法名称示例)。
  • @TetsuyaYamamoto:你好,但我想首先它需要加密吧?
  • 当然在ResolveUrl可以使用加密ID之前它应该被加密。
  • 我收到构建错误Error 2 Databinding expressions are only supported on objects that have a DataBinding event. System.Web.UI.WebControls.HyperLinkField does not have a DataBinding event. D:\Username\CMP\CMP\CMPNew CR PDF\ChangeRequestApplication\Homepage.aspx 172
  • 代替HyperLinkField,尝试用HyperLink 填充的ItemTemplate,其中Eval 表达式效果很好。

标签: c# asp.net encryption query-string


【解决方案1】:

首先,确保您已经创建了一个返回string 用于加密/解密目的的方法。该方法应该可以从页面标记中的数据绑定语法访问:

public string ParseRequest(string id)
{
    // perform encryption/decryption here
}

注意HyperLinkField不支持绑定Eval()加解密过程所需的方法(因为它会抛出HyperLinkField没有DataBinding事件消息),你需要使用TemplateField 并将HyperLink 控件放入其中。然后通过数据绑定调用NavigateUrl里面的加解密方法:

<asp:GridView ID="gvCreatedCRList" runat="server" AutoGenerateColumns="False" CssClass="table table-bordered table-hover"
    ShowHeaderWhenEmpty="True" PageSize="10" AllowPaging="true" EmptyDataText="No data to display.">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="CRNo" runat="server" 
                 NavigateUrl='<%# this.ResolveUrl(
                 string.Format("ChangeRequestDetails.aspx?ID={0}", ParseRequest(Eval("CHANGEREQUESTID").ToString()))) %>' 
                 Text="CR No" Target="_blank" ...>
                </asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>

        <%-- other BoundField columns --%>

    </Columns>

    <%-- other settings --%>
</asp:GridView>

如果您想将整个 URL 与查询字符串一起加密,也可以使用这种方式:

<asp:HyperLink ID="CRNo" runat="server" 
     NavigateUrl='<%# this.ResolveUrl(ParseRequest(Eval("REQUESTURL").ToString())) %>' Text="CR No" Target="_blank" ...>
</asp:HyperLink>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多