【问题标题】:Call C# Function Inside asp:HyperLink NavigateUrl在 asp:HyperLink NavigateUrl 中调用 C# 函数
【发布时间】:2012-03-05 15:31:39
【问题描述】:

我有一个名为 getUserID 的函数,我想通过 asp:HyperLink 中的 NavigateUrl 传递用户 ID。

这是我的超链接:

            <asp:HyperLink ID="lnkMyAccount" Text="My Account" 
                NavigateUrl="~/Users/View.aspx" style="color:White" CssClass="myAreaLink" 
                Runat="server" Font-Size="Small" />
                &nbsp;|&nbsp;

我试过了,但是没用:

            <asp:HyperLink ID="lnkMyAccount" Text="My Account" 
                NavigateUrl='<%# "~/Users/View.aspx" + CPDManagement._code.SearchSelection.getUserID().Tables[0].Rows[0]["u_ID"].ToString() %> style="color:White" CssClass="myAreaLink" 
                Runat="server" Font-Size="Small" />
                &nbsp;|&nbsp;

【问题讨论】:

  • 您是否要显示多个 HyperLink 控件?

标签: c# asp.net


【解决方案1】:

在后面的代码中怎么做?

if(Page.IsPostBack)
{
    lnkMyAccount.NavigateUrl = String.Format("~/Users/View.aspx?UserID={0}", myUserID); 
}

所以它只会以编程方式覆盖导航 URL

这对你有用吗?

您可以通过在页面上调用数据绑定来让&lt;%# .. %&gt; 数据绑定语法工作,即

if(Page.IsPostBack)
{
    Page.DataBind();
}

我会做第一种方式

【讨论】:

  • 嘿,谢谢你的回答,这是在母版页上作为“标签链接”之一,我只是想避免在后面的代码中这样做......
  • 没有问题 - 你总是可以使用 Page.Master.FindControl 来获取链接
  • 我实际上只是通过放置 Page.DataBind() 来让它工作并且它工作。这个 Page.DataBind() 放在 Page_Load() 中会不会引起任何问题?
  • 这就是我要放的地方 - 使用 !Page_Load 子句。但它会绑定所有控件,如果你有一个网格视图,那么它也会绑定stackoverflow.com/questions/1603398/…。您可以尝试 lnkMyAccount.DataBind() - 我相信这适用于 ASP.Net 3.5 及更高版本
【解决方案2】:

立即尝试 你在样式之前错过了'

我希望您处于绑定模式。(在中继器内...)

<asp:HyperLink ID="lnkMyAccount" Text="My Account" 
                NavigateUrl='<%# "~/Users/View.aspx" + CPDManagement._code.SearchSelection.getUserID().Tables[0].Rows[0]["u_ID"].ToString() %> ' style="color:White" CssClass="myAreaLink" 
                Runat="server" Font-Size="Small" />

编辑

确实有效

您的 CPD 管理可能有问题...

【讨论】:

  • 是的,我注意到我错过了一个 ' 但它仍然没有工作。在我这样做之后,它甚至没有使链接超链接。
  • Royi,难道是因为我没有在中继器中,也没有在绑定模式下?
  • 有没有办法在没有中继器或绑定模式的情况下做到这一点?
  • @nick 没有。因为您在服务器端标签内使用了 '#' + 服务器端函数。
  • @nick 主要区别在于调用 Page.DataBind 方法后,所有数据源都绑定到它们的服务器控件。因此,如果您有多个可绑定源 - 它们都会运行
【解决方案3】:

使用asp:Linkbutton,并将所需的值提供给commandArgument 属性

例如:

<asp:LinkButton ID="lnkbtnMyLink" runat="server" commandArgument='<%# Eval("ID")%>' />

【讨论】:

    【解决方案4】:

    试试下面的代码。

    HTML

    <asp:GridView ID="grd" runat="server" onrowdatabound="grd_RowDataBound">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:HyperLink ID="delete" runat="server" Text='<%#GetData().Rows[0][0].ToString() %>' CommandName="delete"></asp:HyperLink>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    代码隐藏

    public DataTable GetData()
    {
        DataTable Dt = new DataTable();
        DataColumn DC = new DataColumn("Test");
        Dt.Columns.Add(DC);
    
        DataRow Dr = Dt.NewRow();
        Dr["Test"] = "1";
        Dt.Rows.Add(Dr);
        return Dt;//.Rows[0]["test"].ToString();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        grd.DataSource = GetData();
        grd.DataBind();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2016-07-11
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多