ASP.NET C#Repeater - 如何在没有Javascript的情况下将信息传递回服务器?

Com*_*umb 3 javascript c# asp.net repeater

我正在学习C#并在我的第一个ASP.Net电子商务网站上工作.

我有以下转发器:

<asp:Repeater ID="Cartridges" runat="server" OnItemCommand="Cartridges_ItemCommand">
  <ItemTemplate>                            
       <asp:LinkButton ID="buy" runat="server" CommandName="AddtoCart" CommandArgument=<%#Eval("cartID") %> Text="Buy"></asp:LinkButton>
  </ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

但是,当呈现代码时,转发器会生成JavaScript以进行回发,如果用户关闭了JavaScript,则填充购物车时效果不佳!

<div class="wrap-cart">
 <div class="cartbuy"><a id="ContentPlaceHolder1_Cartridges_buy_0" href="javascript:__doPostBack(&#39;ctl00$ContentPlaceHolder1$Cartridges$ctl00$buy&#39;,&#39;&#39;)">Buy</a></div>
 <div class="cartimg"><a href="url.html" class="productsurl"><img src="pic/epson-comp-set50.jpg" alt="product" /></a></div>
 <div class="carttext">
       <p class="cartdesc"><a href="url.html" class="productsurl"><span class="homeprinters">product</span></a></p>
       <p class="cartprice">£x.xx</p>
 </div>
Run Code Online (Sandbox Code Playgroud)

我想要做的就是将cartID传递给数据表.有没有办法围绕它,所以JavaScript根本没有涉及?

为了完整性,我的代码背后是:

protected void Cartridges_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    cartidtest.Text = "added";
    if (e.CommandName == "AddtoCart")
    {
        string varCartID = (e.CommandArgument).ToString();

        //more code here
    }
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ter 5

当然,您可以通过QueryString传递选定的ItemID

首先,生成一个这样的锚标记:

<a href="NextCheckoutStep.aspx?ItemID=45">AddToCart</a>
Run Code Online (Sandbox Code Playgroud)

这可以在ItemTemplate中完成:

<a href='<%# "NextCheckoutStep.aspx?ItemID=" + Eval("ItemID").ToString() %>'>AddToCart</a>
Run Code Online (Sandbox Code Playgroud)

最后,在NextCheckoutStep.aspx中,访问:

Request.QueryString["ItemID"]
Run Code Online (Sandbox Code Playgroud)

笔记

  • 您可以将信息传递回同一页面.只需用CurrentCheckoutStep.aspx替换NextCheckoutStep.aspx即可.您只需要将一些路由代码放入页面加载(或初始化)处理程序(使用postback = false),以对此方法创建的各种页面状态作出反应.有时,状态图有助于使用此设计.
  • 确保100%清理QueryString-Reads,因为恶意用户会尝试在查询字符串中放入令人讨厌的值.
  • 您不必使用QueryString,您也可以使用HTTP POST集合 ; 但是,你也需要在这里消毒,因为你永远不会相信来自客户的输入.