2014-11-10 5 views
0

У меня есть простая сетка элементов запаса, которую пользователь может перетаскивать из одного места в другое - вычитая 1 из источника и добавляя его в пункт назначения.Обновление скрытого поля в повторителе с помощью JQuery

Начальные значения заполняются с помощью репитера 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 ++; 
     } 
    } 
} 

I Я уверен, что этот бит кода неверен с точки зрения C#;

$("input[name$=rptTyres_hfData_" + dragAttr + "]").val(dragNew); 
    $("input[name$=rptTyres_hfData_" + dropAttr + "]").val(dropNew); 

Любые предложения?

EDIT: Я попытался с помощью скрытого поля 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

Единственный способ, которым я мог заставить это работать, - разместить проводной блок скрытых полей вне ретранслятора. Не знаю, почему, но, по крайней мере, это работает.

Смежные вопросы