我有一个简单的库存物品网格,用户可以从一个位置拖动到另一个位置 - 从源中减去1并将一个添加到目的地。
使用c#转发器填充初始值,我使用JQuery来显示拖放。
我的问题是我想点击保存按钮。我遍历网格使用值更新数据库。保存有效(所有隐藏字段都已填充)。但是当遇到重新计算的网格项时,隐藏字段为空。
她是我的中继者:
<asp:Repeater ID="rptTyres" runat="server">
<ItemTemplate>
<li data-id="<%#Eval("TyresId") %>" class="ty"><%#Eval("TyresStockVol") %><asp:HiddenField ID="hfData" runat="server" Value='<%#Eval("TyreStockVol") %>' /></li>
</ItemTemplate>
</asp:Repeater>
以下是修改拖放值的JQuery:
if (dragValue > 0) {
$("[data-id=" + dragAttr + "]").text(dragNew);
$("[data-id=" + dropAttr + "]").text(dropNew);
$("input[name$=rptTyres_hfData_" + dragAttr + "]").val(dragNew); //new source total
$("input[name$=rptTyres_hfData_" + dropAttr + "]").val(dropNew); //new destination total
}
这是点击事件:
protected void btnSave_Click(object sender, EventArgs e)
{
var tyreId = 1;
foreach (RepeaterItem item in rptTyres.Items)
{
if (item.ItemType == ListItemType.Item
|| item.ItemType == ListItemType.AlternatingItem)
{
var hf = (HiddenField)item.FindControl("hfData");
var hfData = Convert.ToInt32(hf.Value);
UpdateTyre(tyreId, hfData);
tyreId ++;
}
}
}
从C#的角度来看,我确信这段代码是错误的;
$("input[name$=rptTyres_hfData_" + dragAttr + "]").val(dragNew);
$("input[name$=rptTyres_hfData_" + dropAttr + "]").val(dropNew);
有什么建议吗?
编辑:我尝试使用html隐藏字段,并使用JQuery修改隐藏字段值:
$("input:hidden[name=hid" + dragAttr + "]").val(dragNew);
$("input:hidden[name=hid" + dragAttr + "]").val(dropNew);
并读取修改数据库的值:
var hfData = Request.Form["hid" + tyreId];
不幸的是,它在未更改时获取值,但JQuery更新的任何隐藏字段都返回null。我在这里碰到一堵砖墙!
答案 0 :(得分:0)
我能让这个工作的唯一方法是在转发器之外放置一个硬连线的隐藏字段块。不知道为什么,但至少它正在发挥作用。