我正在学习 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>
但是,当呈现代码时,转发器会生成 JavaScript 以回发,如果用户关闭了 JavaScript,这在填充购物车时是不好的!
<div class="wrap-cart">
<div class="cartbuy"><a id="ContentPlaceHolder1_Cartridges_buy_0" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Cartridges$ctl00$buy','')">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>
我只想将 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
}
}
最佳答案
当然,你可以通过QueryString传递选中的ItemID
首先,生成一个这样的 anchor 标签:
<a href="NextCheckoutStep.aspx?ItemID=45">AddToCart</a>
这可以在 ItemTemplate 中完成:
<a href='<%# "NextCheckoutStep.aspx?ItemID=" + Eval("ItemID").ToString() %>'>AddToCart</a>
最后,在 NextCheckoutStep.aspx 中,访问:
Request.QueryString["ItemID"]
注意事项
- 您可以将信息传回同一页面。只需将 NextCheckoutStep.aspx 替换为 CurrentCheckoutStep.aspx。您只需要将一些路由代码放入您的页面加载(或初始化)处理程序(使用 postback = false)以对由此方法创建的各种页面状态使用react。有时状态图有助于使用此设计。
- 确保 100% 清理您的查询字符串读取,因为恶意用户会尝试在查询字符串中放入恶意值。
- 您不必使用 QueryString,您也可以使用 HTTP POST collection ;但是,您也需要在这里进行清理,因为您永远不能相信来自客户端的输入。
关于c# - ASP.NET C# Repeater - 如何在没有 Javascript 的情况下将信息传回服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317544/