【问题标题】:Disable the NavigateUrl property on the HyperLink in c#在 C# 中禁用 HyperLink 上的 NavigateUrl 属性
【发布时间】:2017-07-23 15:20:09
【问题描述】:

当变量 aut 的值小于零时,我需要禁用 HyperLink 上的 NavigateUrl 属性。

我已经在我的 .cs 页面的代码隐藏中尝试了这个,但没有成功,因为 HyperLink 上的 NavigateUrl 属性已启用,尽管它会打开一个空白页面( on window popup ) 在浏览器中,当点击 ImageUrl

谁能帮帮我?

提前致谢

我的代码如下:

.cs

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {            
        if (aut > 0)
        {
            HyperLink button = (HyperLink)e.Row.FindControl("MMM");
            button.Enabled = true;                
        }
        else
        {
            HyperLink button = (HyperLink)e.Row.FindControl("MMM");
            button.Enabled = false;
            button.NavigateUrl = "";
        }
    }
}

.aspx

<asp:TemplateField HeaderText="MMM" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new">
    <ItemTemplate>
        <asp:HyperLink ID="MMM" runat="server" NavigateUrl='<%# (String.IsNullOrEmpty(Eval("MMM").ToString()) ? String.Format("http://...?sId={0}&s=2", HttpUtility.UrlEncode(Base64ForUrlEncode(Eval("id").ToString()))) : "") %>'
            ImageUrl='<%#(String.IsNullOrEmpty(Eval("MMM").ToString()) ? "/Images/bullett/redbul.gif" : "/Images/bullett/forestbul.gif")%>'
            ToolTip='<%#(String.IsNullOrEmpty(Eval("MMM").ToString()) ? "Not Exists" : "Exists")%>'
            Target="_blank" BorderStyle="None" ForeColor="Transparent" OnClick="if (!confirm('Confirm ?'))return false;window.open(this.href,'playsample','width=500,height=500,left=100,top=100,scrollbars=yes,dependent=yes,toolbar=no,location=no,status=no,directories=no,menubar=no,status=no,resizable=yes');return false;"
            Enabled='<%#(!String.IsNullOrEmpty(Eval("MMM").ToString()) ? false : true)%>'>
        </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

【问题讨论】:

  • 尝试用“#”替换你的空字符串
  • @Aboc:谢谢,但我没有更改...

标签: c# asp.net hyperlink


【解决方案1】:

您在代码隐藏中的控件上设置的所有这些属性都被您 aspx 中 标记中的代码覆盖。例如,无论您在 C# 代码中设置什么 button.Enabled,都将在稍后的页面生命周期中被以下内容覆盖:

Enabled='<%#(!String.IsNullOrEmpty(Eval("MMM").ToString()) ? false : true)%>'

我猜在您开始从事这个项目之前,您的 aspx 中的所有此类代码都是由其他人编写的?如果是这样,最简单的解决方案可能是删除您的 GridView1_RowDataBound 函数,而是修改 标记内的代码以将行为更改为您需要的行为。

话虽如此,我会说您尝试这样做的方式实际上更正确。如果您有足够的时间,并且不怕重构现有代码,则可以将 标记内的所有逻辑移至 GridView1_RowDataBound 函数,并从 aspx 中删除 标记所以它只是:

<asp:TemplateField HeaderText="MMM" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new">
<ItemTemplate>
    <asp:HyperLink ID="MMM" runat="server">
    </asp:HyperLink>
</ItemTemplate>

当然,正如我所说,您仍然需要在 GridView1_RowDataBound 函数中重新创建所有已删除的逻辑,我没有费心在这里展示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2011-05-11
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多