在GridView中使用HyperLinkField进行URL导航

6
我在gridview中使用HyperLinkField,想要链接到另一个URL + ID。
<div id="searchResults" runat="server">
    <asp:GridView ID="gvSearchResult" runat="server" AutoGenerateColumns = "false" 
    CaptionAlign="NotSet" CellPadding="5">
    <Columns>
        <asp:TemplateField HeaderText="Användare">
            <ItemTemplate>
                <%# Eval("UName")%>
                <br />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:HyperLinkField DataNavigateUrlFields="UName" 
                            DataNavigateUrlFormatString='/MemberPages/profile.aspx?ID=<%# Eval("PID") %>'
                            DataTextField="UName" 
                            HeaderText="Besök sida" 
                            SortExpression="Name" 
                            ItemStyle-Width="100px"
                            ItemStyle-Wrap="true" />
    </Columns>
    </asp:GridView>
</div>

GridView正在使用DataSourceDataBind。它在抱怨:

DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID=<%# Eval("PID") %>"

我不确定何时使用 <%# Eval("PID") %>,但我知道肯定有一个PID,我已经仔细检查过。

如果我使用NavigateUrl="/MemberPages/profile.aspx?ID=<%# Eval("PID") %>",我也会得到相同的错误:

Literal content ('<asp:HyperLinkField DataNavigateUrlFields="UName" 
                               DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'.
3个回答

10

如果您需要在属性值中使用 ",请使用 ' 作为分隔符。

Attribute='Some value with " symbol'

如果你需要在属性中使用单引号,可以使用 ' 来代替。

Attribute="Some value with ' symbol"

同时改变您的列定义。

<asp:HyperLinkField DataNavigateUrlFields="PID" 
                    DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID={0}"
                    DataTextField="UName" 
                    HeaderText="Besök sida" 
                    SortExpression="Name" 
                    ItemStyle-Width="100px"
                    ItemStyle-Wrap="true" />

DataNavigateUrlFormatString属性中,您使用DataNavigateUrlFields指定的数据列(格式类似于String.Format方法)。


数据绑定标记给了我以下信息:数据绑定表达式仅支持具有DataBinding事件的对象。System.Web.UI.WebControls.HyperLinkField没有DataBinding事件。 - MrProgram
非常感谢!你让我今天过得很愉快。我今天已经学习了12个小时,终于可以去睡觉了:) 谢谢! - MrProgram
但是,你能告诉我 {0} 在做什么吗? - MrProgram
你可以在这里找到说明:http://msdn.microsoft.com/en-us/library/system.string.format.aspx - semao
我需要根据行中特定单元格的内容,在网格视图的不同行上打开不同的页面。我该怎么做? - Farrukh Sarmad

0

虽然被接受的答案可行。但是对于我的情况,我需要使用不同的控件。这个例子可以让您在URL字符串中使用Eval。

<asp:LinkButton PostBackUrl='<%#"~/config.aspx?Id=" + Eval("Id") %>'  runat="server">Configuration</asp:LinkButton>

0

我会做的第一件事是替换下面这行代码:

DataNavigateUrlFormatString="/MemberPages/profile.aspx?ID=<%# Eval("PID") %>"

用下面这行代码替换它:

DataNavigateUrlFormatString='/MemberPages/profile.aspx?ID=<%# Eval("PID") %>'

请注意,我将双引号替换为单引号,并且在开头和结尾处加上了单引号。


哎呀,现在才看到。我已经更改了它(并编辑了问题),但我仍然没有得到正确的URL。'/MemberPages/profile.aspx?ID=<%# Eval("PID") %>' 应该是 '/MemberPages/profile.aspx?ID=10'。 - MrProgram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接