在DataNrid的DataNavigateUrlFormatString中传递会话变量

时间:2013-12-31 11:17:47

标签: c# asp.net datagrid c#-2.0

我正在使用带有超链接列的Datagrid。

    <asp:DataGrid ID="dg" runat="server" AllowSorting="True" Font="Trebuchet MS, 14.25pt" Width ="880px"
                AutoGenerateColumns="false" ForeColor="Black" AlternatingItemStyle-BackColor="LightGray"
                OnItemDataBound="dgdatabound" EnableViewState="true">
                <HeaderStyle CssClass="GridHeader" />
                <ItemStyle CssClass="GridItem" />
                <AlternatingItemStyle CssClass="GridAltItem" />
                <PagerStyle VerticalAlign="Middle" />
                <Columns>
    <asp:HyperLinkColumn  DataTextField ="BugId"   HeaderText="BugId" HeaderStyle-Width ="60" 
                    DataNavigateUrlField ="BugId" 
                    DataNavigateUrlFormatString="SOME URL?USER"
                    HeaderStyle-BackColor="AliceBlue" />
    </Columns>

从上面的代码中,我如何从Session传递'USER'值。

截至目前,我已尝试过:

DataNavigateUrlFormatString="SOME URL?USER =<% Session["username"]%>"

但它没有用:(

1 个答案:

答案 0 :(得分:0)

您不能在服务器控件的属性中使用ASP.NET内联表达式。

请参阅this MSDN artcle

  

请记住,显示表达式不能用于   服务器控件的属性。这是因为.NET Framework   直接编译整个表达式而不是显示   content作为属性的值。

如果您绝对需要从会话中获取此值,则需要在代码页中设置此值。

这有点像hacky,但你可以这样做(可能在你的Page_Load中):

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        string yourURL = "SOME URL?USER=" + Session["username"].ToString();
        dg.Columns[0].DataNavigateUrlFormatString = yourURL;
    }
}

注意:我说“hacky”的唯一原因是你必须对列序号(数字)进行硬编码,这是脆弱的(如果您的列顺序发生变化)。