用的是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显示的为空,不知道传递语法上有什么错误。

解决方案 »

  1.   

    试试:<asp:HyperLink ID="hlID" runat="server" NavigateUrl=' <%# "Test.aspx?num=" & DataBinder.Eval(Container,"DataItem.num") & "&TaskID=" & TKID%> '
            Text=' <%# DataBinder.Eval(Container,"DataItem.name") %> '>
      

  2.   

    回insus,
    试了一下,不行哦,提示错误CS0019:运算符"&"无法应用于“string”和“objece”类型的操作数
      

  3.   

    后台的变量要想在Html中传直的话,要声明为Public或者Protect
      

  4.   

    试试:
    <asp:HyperLink ID="hlID" Runat="server" NavigateUrl='Test.aspx?num= <%#DataBinder.Eval(Container.DataItem,"num")%> &amp;TaskID= <%=TKID%> '   text=' <%#   DataBinder.Eval(Container.DataItem, "name")   %> '> 
    TKID在后台声明为public变量
      

  5.   

    回zhuanshen712,
    我已经将后台的变量定义为public string TKID了,可是还是不行
      

  6.   

    在Test页num的接收编码为 :
    public string TsID
            {
                get { return (ViewState["num"] == null ? "" : ViewState["num"].ToString()); }
            }
      

  7.   

    2003好像不接受在控件中直接附服务器段代码,也就是
    <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();
        }
     
      

  8.   

    To 2楼:加上ToString(),如:<asp:HyperLink   ID="hlID"   runat="server"   NavigateUrl='   <%#   "Test.aspx?num="   &   DataBinder.Eval(Container,"DataItem.num").ToString()   &   "&TaskID="   &   TKID%>   ' 
                    Text='   <%#   DataBinder.Eval(Container,"DataItem.name").ToString()   %>   '> 
      

  9.   

    NavigateUrl='Test.aspx?num= <%#DataBinder.Eval(Container,"DataItem.num")%> &TaskID= <%=TKID%> '
    服务器控件不可以这么直接使用<%#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>
      

  10.   

    总是服务器端控件属性
    不可以用<%#DataBinder.Eval(Container,"DataItem.num")%>直接拼接,
    要拼接必须把所有字符全部放到<%#%>里面而客户端控件属性可以用<%#DataBinder.Eval(Container,"DataItem.num")%>直接拼接希望大家注意一下区别
      

  11.   

    不好意思,
    C#请用"+",vb.net用"&"
      

  12.   

    回zhuanshen712 ,四楼的代码和我原先的代码基本一样的,就是一个&和&amp的区别,试了一下,也不行。
    回tomatozq ,用后台处理的方法试了可行,另外
    我把
    HyperLink   hl   =   FindControl("hlID")改成了
    HyperLink hl=(HyperLink)e.Item.Cells[10].FindControl("hlID"); (10是表中的位置)你说:“2003好像不接受在控件中直接附服务器段代码”,能确认么?本来我感觉我写在前台的语句语法上好像没什么问题的,可不管怎么改都不能正常传递。