C# 在c中的超链接上禁用NavigateUrl属性#

C# 在c中的超链接上禁用NavigateUrl属性#,c#,asp.net,hyperlink,C#,Asp.net,Hyperlink,当变量aut的值小于零时,我需要禁用超链接上的NavigateUrl属性 我在.cs页面的代码隐藏中尝试了这一点,但没有成功,因为超链接上的NavigateUrl属性已启用,尽管当单击ImageUrl时,它会在浏览器中打开一个空白页面(在窗口弹出窗口中) 有人能帮我吗 提前谢谢 我的代码如下: .cs protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowTy

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

我在.cs页面的代码隐藏中尝试了这一点,但没有成功,因为超链接上的NavigateUrl属性已启用,尽管当单击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>

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

Enabled='<%#(!String.IsNullOrEmpty(Eval("MMM").ToString()) ? false : true)%>'
Enabled=''
我猜在你开始这个项目之前,你的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函数中重新创建所有已删除的逻辑,我没有在这里演示。

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