我正在使用带有超链接列的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"]%>"
但它没有用:(
答案 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”的唯一原因是你必须对列序号(数字)进行硬编码,这是脆弱的(如果您的列顺序发生变化)。