【问题标题】:Pass session variable in the DataNavigateUrlFormatString for datagrid在 DataNavigateUrlFormatString 中为数据网格传递会话变量
【发布时间】:2013-12-31 11:17:46
【问题描述】:

我正在使用带有超链接列的 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"]%>"

但它没有工作:(

【问题讨论】:

  • 到目前为止你写了什么代码?为什么它不起作用?
  • 我已经更新了代码
  • @Dipesh 为什么需要在 URL 中传递会话变量值?您可以在页面中的任何位置使用此会话变量值。
  • @Dipesh “它没有用”是什么意思?

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


【解决方案1】:

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

this MSDN artcle:

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

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

这有点 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;
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2011-06-12
    相关资源
    最近更新 更多