用的是vs2003,在datagrid中,一标准列用了HyperLink(TKID为本页cs文件中的public变量),要将本页绑定的参数num和cs后台的变量传到test页(两变量均为string):
<asp:HyperLink ID="hlID" Runat="server" NavigateUrl='Test.aspx?num=<%#DataBinder.Eval(Container,"DataItem.num")%>&TaskID=<%=TKID%>' text='<%# DataBinder.Eval(Container, "DataItem.name") %>'>在Test页num的接收编码为
private string TsID
{
get
{
string s = Request.QueryString["num"];
if( s != null )
return s;
else
return "";
}
}
在Page_Load中用MessageBox.Alert(TsID);发现显示的是: <% ,也就是传递过来的TsID值是<%,而TaskID的接收码也类似,用MessageBox.Alert显示的为空,不知道传递语法上有什么错误。
<asp:HyperLink ID="hlID" Runat="server" NavigateUrl='Test.aspx?num=<%#DataBinder.Eval(Container,"DataItem.num")%>&TaskID=<%=TKID%>' text='<%# DataBinder.Eval(Container, "DataItem.name") %>'>在Test页num的接收编码为
private string TsID
{
get
{
string s = Request.QueryString["num"];
if( s != null )
return s;
else
return "";
}
}
在Page_Load中用MessageBox.Alert(TsID);发现显示的是: <% ,也就是传递过来的TsID值是<%,而TaskID的接收码也类似,用MessageBox.Alert显示的为空,不知道传递语法上有什么错误。
Text=' <%# DataBinder.Eval(Container,"DataItem.name") %> '>
试了一下,不行哦,提示错误CS0019:运算符"&"无法应用于“string”和“objece”类型的操作数
<asp:HyperLink ID="hlID" Runat="server" NavigateUrl='Test.aspx?num= <%#DataBinder.Eval(Container.DataItem,"num")%> &TaskID= <%=TKID%> ' text=' <%# DataBinder.Eval(Container.DataItem, "name") %> '>
TKID在后台声明为public变量
我已经将后台的变量定义为public string TKID了,可是还是不行
public string TsID
{
get { return (ViewState["num"] == null ? "" : ViewState["num"].ToString()); }
}
<asp:XX text="<%=ServerVariable%>" id="xx1" runat="server"/>
你可以在datagrid的databound事件中动态写嘛:DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
DataRowView drv=(DataRowView)e.Item.DataItem;
HyperLink hl = FindControl("hlID");
hl.NavigateUrl = string.Format("Test.aspx?num={0}&TaskID={1}"
drv["num"].ToString(),
TKID
);
hl.Text = drv["name"].ToString();
}
Text=' <%# DataBinder.Eval(Container,"DataItem.name").ToString() %> '>
服务器控件不可以这么直接使用<%#DataBinder.Eval(Container,"DataItem.num")%>修改如下
NavigateUrl='<%#"Test.aspx?num="+DataBinder.Eval(Container,"DataItem.num")+"&TaskID="+TKID%>'
客户端控件相反还真可以如下使用
<a href='Test.aspx?num=<%#DataBinder.Eval(Container,"DataItem.num")%>'>hehe</a>
不可以用<%#DataBinder.Eval(Container,"DataItem.num")%>直接拼接,
要拼接必须把所有字符全部放到<%#%>里面而客户端控件属性可以用<%#DataBinder.Eval(Container,"DataItem.num")%>直接拼接希望大家注意一下区别
C#请用"+",vb.net用"&"
回tomatozq ,用后台处理的方法试了可行,另外
我把
HyperLink hl = FindControl("hlID")改成了
HyperLink hl=(HyperLink)e.Item.Cells[10].FindControl("hlID"); (10是表中的位置)你说:“2003好像不接受在控件中直接附服务器段代码”,能确认么?本来我感觉我写在前台的语句语法上好像没什么问题的,可不管怎么改都不能正常传递。