aspx客户端动态创建asp标签

时间:2013-12-26 11:36:03

标签: c# asp.net dynamic client-side

我试图在客户端动态创建asp代码。 我有这样的代码:

 <% foreach (Product item in ProductList())
       {  <div class="prod_box">
    <div class="center_prod_box">

我想添加每个产品的信息。我没有将项目的数据提取到简单的html标签中的问题:

<div class="product_title"><%:item.Name %></div>
      <div class="product_img"><img src="Images/<%:System.IO.File.Exists(Server.MapPath("~/Images/"+item.Image))?item.Image:"default_image.jpg"%>" alt="" width="60" height="60" border="0" /></div>
      <div class="prod_price"> <span class="price"><%:item.Price%></span></div>

如您所见,&lt;%:item.FIELD%&gt;适用于任何html标签。

但是如果我希望标签是asp对象而不是纯HTML呢?这种事情不起作用:

<asp:Button runat="server" Text="addToCart" class="prod_buy" OnClick="Add_Click" CommandArgument="<%#item.Code%>"/>

我收到错误:“当前上下文中不存在名称'item'。”

如何在aspx客户端动态创建asp对象?

3 个答案:

答案 0 :(得分:2)

ASP.NET是一种服务器端技术。客户端无法创建服务器端标记。

答案 1 :(得分:2)

ASP.Net是一种服务器技术,它在服务器上进行解析,并动态创建HTML和JavaScript,然后传递给客户端。客户端浏览器与技术无关;它不知道或不关心服务器是否使用ASP.Net,Ruby / Rails,PHP,Java或任何其他技术来创建HTML和JavaScript。如果您尝试更改客户端上的输出,则必须使用JavaScript来调用服务器以请求新信息,然后更改数据值(通常称为AJAX,Asynchronous JavaScript和XML的首字母缩写),或者您必须对服务器执行完整回发并让服务器重新呈现HTML。较新的ASP技术(例如ASP.Net MVC)使用服务器端和JavaScript技术的组合来减少手动操作,但它们最终隐藏了AJAX调用的实现。

修改

重新阅读你的帖子后,我相信我明白你要做什么。 CommandArgument是一个文字字符串,您尝试在将变量传递给客户端之前将其写入。为此,您需要使用#Eval关键字,即CommandArgument='<%#Eval("item.Code")%>'。这将在字符串属性中为此值建立单向绑定。

答案 2 :(得分:0)

似乎无法在给定的服务器控件中引用asp变量。

我建议使用Repeater,因为它不生成HTML,可以访问活动项,并且可以在服务器控件上评估值。

<asp:Repeater ID="rpt" runat="server">
    <ItemTemplate>
        <%# Eval("Name") %>
        <asp:Button runat="server" CommandArgument='<%# Eval("Code") %>'/>      
    </ItemTemplate>
</asp:Repeater>

绑定它:

rpt.DataSource = ProductList();
rpt.DataBind();

一个缺点是缺乏通量控制(如果声明)。如果您需要,可以使用PlaceHolders:

<asp:Repeater ID="rpt" runat="server">
    <ItemTemplate>
        <asp:PlaceHolder ID="phTrue" runat="server" Visible='<%# Condition %>' >
            <div>True</div>
        </asp:PlaceHolder>
        <asp:PlaceHolder ID="phFlase" runat="server" Visible='<%# !Condition %>' >
            <div>False</div>
        </asp:PlaceHolder>
    </ItemTemplate>
</asp:Repeater>