0

我想将 JSON 对象包含到 ASP.NET 页面中的 HyperLink rel 属性中,以便稍后通过 javascript 使用该对象。我正在使用这样的代码:

<asp:GridView ID="GridView" runat="server" AllowPaging="True" AllowSorting="True"
    AutoGenerateColumns="False" DataKeyNames="ID_MATERIALSAP" DataSourceID="dsMaterials">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="hlSelector" runat="server" NavigateUrl="#" rel='<%# ComposeJsonObject(Eval("ID_MATERIALSAP"), Eval("NAME")) %>' CssClass="selector" Text="Select"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

方法ComposeJsonObject将 JSON 对象作为字符串返回。我的问题是 JSON 包含双引号 (") 字符并且绑定单引号 (') 被 ASP 替换为双引号。因此生成的代码无效,如下所示:

<a id="controlId" class="selector" rel="{"id":"300433460","title":"Material name"}" href="#">Select</a>

我怎样才能保持单引号引用的 rel 内容得到这样的结果:

<a id="controlId" class="selector" rel='{"id":"300433460","title":"Material name"}' href="#">Select</a>

还是有其他更好的解决方案?

4

2 回答 2

0

在 GridView 的 rowdatabound 事件中设置 rel 属性。像这样的东西:

<asp:GridView ID="GridView" runat="server" AllowPaging="True" AllowSorting="True"
    AutoGenerateColumns="False" DataKeyNames="ID_MATERIALSAP" DataSourceID="dsMaterials" OnRowDataBound="GridView_RowDataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="hlSelector" runat="server" NavigateUrl="#" CssClass="selector" Text="Select"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

编码:

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Create an instance of the datarow
        DataRowView drv = (DataRowView)e.Row.DataItem;

        Hyperlink hlSelector = e.Row.FindControl("hlSelector") as HyperLink;
        hlSelector.Attributes.Add("rel", ComposeJsonObject(drv["ID_MATERIALSAP"].ToString(), drv["NAME"].ToString()));
    }
}
于 2013-06-06T13:59:32.510 回答
0

我找到了简单的解决方案。JSON 字符串可以是 url 编码的。所以我修改了 ComposeJsonObject 方法以返回由HttpUtility.HtmlEncode(). 结果现在是这样的:

<a id="controlId" class="selector" rel="{&quot;id&quot;:&quot;300433460&quot;,&quot;Material name&quot;:&quot;test&quot;}" href="#">Select</a>

并将 json 解析为对象工作正常。我正在使用jQuery.parseJSON();它。

于 2013-06-06T15:08:09.210 回答