在非ASP元素中使用代码服务器端脚本分隔符/ ASP.NET内联表达式

时间:2017-09-08 09:42:25

标签: asp.net

我收到此错误消息:

  

无法从其字符串创建“System.Boolean”类型的对象   表示<%:false%>对于'可见'属性。

当我尝试在我的ASP.net网站中运行此代码时:

<a runat="server" visible='<%: false %>' href="~/" >Home</a>

是否存在语法错误? false应该可以通过以下任何方法替换:

<asp:Panel runat="server" Visible='<%: GetTrueOrFalse() %>'>Home</a>

4 个答案:

答案 0 :(得分:2)

假设您有一个返回bool值的方法,如下所示:

public bool IsVisible()
{
    if (some_condition) // example condition test
    {
        return true;
    }
    else
    {
        return false;
    }
}

您需要使用这样的绑定:

<强> ASPX

<a runat="server" visible='<%# IsVisible() %>' href="~/" >Home</a>

ASPX.CS(代码隐藏)

protected void Page_Load(object sender, EventArgs e)
{
    // do something

    Page.DataBind();
}

注意:此技巧适用于返回bool的方法或属性。

更新1:

由于a代码未设置任何id属性,您可以删除runat="server"

<a visible='<%# IsVisible() %>' href="~/" >Home</a>

或者将CSS与display: nonevisibility: hidden

一起使用
<a visible='<%# IsVisible() %>' href="~/" style="visibility:hidden; display:none;">Home</a>

参考:

Is code rendering block <%=%> useful for boolean type?

答案 1 :(得分:1)

学习这项技术你会经常使用它。服务器端控件或容器可以很容易地在服务器端进行操作。怎么样?好吧,你做了第一部分你正在游戏它runat="server"现在你所要做的就是给它一个id所以它看起来像这样我们的名字叫myLink

<a runat="server" id="MyLink" href="~/" >Home</a>

- 你注意到我删除了属性Visible。是的,因为现在我们将完全控制它的服务器方面。 让我们假设您想第一次使用隐藏的页面开始,这很容易: 在你的pageload事件中,我们将使用一种好的技术来确定我们编写的代码只会在第一次加载时运行一次。

    protected void Page_Load(object sender, EventArgs e)
    {

       //this condition means if is not post back (meaning the very first time only)

        if(!IsPostBack)
          {
            MyLink.Visible = false;
          }
    } 

现在你已经掌握了它,你可以随时随地再次看到你的控件

MyLink.Visible = true; 

并完成了。 lemme知道你是否需要更多的帮助!

如果你想内联它是一个字符串值而不是bool所以你应该用双引号将其包裹起来 visible='<%: "false" %>' &lt; =注意“”

答案 2 :(得分:1)

您还可以声明一个公共布尔值并使用它。如果链接在GridView / Repetater等之外,则需要使用DataBind()

public bool isVisible = true;

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

现在你可以在aspx上使用它了。

<a runat="server" visible='<%# isVisible %>' href="~/">Home</a>

但是,您也可以在代码中使用基于不同变量或类值的三元运算符。

public int myValue = 11;
public Book myBook = new Book() { category = "Fantasy" };

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

现在,您可以根据myValue设置可见性,即使它不是布尔值。

<a runat="server" visible='<%# myValue > 10 ? true : false %>' href="~/">Home</a>

//or

<a runat="server" visible='<%# myBook.category == "Fantasy" ? true : false %>' href="~/">Home</a>

答案 3 :(得分:1)

使用此<%: ... %>语法会引发上述解析器错误。数据绑定服务器控制值的正确语法是<%# ... %>Inline expression's more detail is here.

你可以用另一种方式完成它:

<% if(GetTrueOrFalse()) { %>
    <a ID="alink" runat="server" href="~/" >Home</a>
    //... other code
<% } %>