如何在asp.net页面上的<%...%>标签内使用c#代码?

agn*_*zka 9 c# asp.net

我正在编写一个asp.net用户控件.它有一个属性,FurtherReadingPage,以及绑定到它的两个控件:ObjectDataSource和Repeater.在Repeater里面我想显示一个href属性设置为类似的超链接FurtherReadingPage + "?id=" + Eval("Id").我不知道如何在页面标记内执行此操作.我可以使用<% Eval("Id") %><% Response.Write(FurtherReadingPage + "?id=") %>单独使用,但我不知道如何混合它们.

Kei*_*ith 19

你有几个不同的标签:

<% 执行里面的代码:

<% int id = int.Parse(Request["id"]); %> 
Run Code Online (Sandbox Code Playgroud)

<%= 写出里面的代码:

<%=id %> <!-- note no ; -->

<!-- this is shorthand for: -->
<% Response.Write(id); %> 
Run Code Online (Sandbox Code Playgroud)

当在页面上呈现时,这两个都会破坏正常流程,例如,如果您在普通的Asp.net中使用它们,<head runat="server">您将遇到问题.

<%# 数据绑定:

<%# Eval("id") %>
Run Code Online (Sandbox Code Playgroud)

这允许您指定Asp.net WebForms呈现为集合的控件的绑定(而不是可以使用的文字控件<%=),例如:

<!-- this could be inside a repeater or another control -->
<asp:Hyperlink runat="server" ID="demo" 
     NavigateUrl="page.aspx?id=<%# Eval("id") %>" />

<%  //without this bind the <%# will be ignored
    void Page_Load( object sender, EventArgs e ) {
        demo.DataBind(); 
        //or
        repeaterWithManyLinks.DataBind(); 
    } 
%>
Run Code Online (Sandbox Code Playgroud)

对于您的具体情况,您可以:

  • 使用一个中继器,并<%# Eval(...) %>repeater.DataBind();

要么

  • 使用foreach循环(<% foreach(... %>)<%= ... %>


Kir*_*tan 3

你可以这样做 -

<asp:Hyperlink runat="Server" ID="hlLink" NavigateUrl='<%# FurtherReadingPage + "?Id=" + DataBinder.Eval(Container.DataItem, "Id")  %>' />
Run Code Online (Sandbox Code Playgroud)