2011-09-26 67 views
0

我有一個JavaScript需要做兩件事: 1.發送數據在數據庫中更新 2.更新我的HTML格式的地方在顯示模式。 3.更新我的表的行以反映更新的數據。Asp網絡mvc和javascript響應

我的JavaScript能做的只有1和2:

$(".form-commands .save").live("click", function() { 
    var f = $(".form-edit"); 
    var sf = f.serialize(); 
    $.post(this.href, 
     sf, 
     function (response) { 
      f.html(response); 
     }); 
    // I need to do something here to update the html table row... 
    return false; 
}); 

我認爲一個解決方法是調用另一個動作,這將使得只有錶行元素。 我該怎麼做?

-

錶行創建這樣的事情:

<tr id="h62"> 
    <td>Ford</td> 
    <td>Focus</td> 
</tr> 

,其中62是該記錄的 「ID」。


工作的代碼,但醜:

$(".form-commands .save").live("click", function() { 
    var f = $(".form-edit"); 
    var sf = f.serialize(); 
    var handle = $(".form-edit #Handle")[0].value; 
    var itemLink = this.attributes["edititem"].value; 
    var row = $("#grid #h" + handle); 

    $.post(this.href, 
     sf, 
     function (response) { 
      $("#form-edit").html(response); 
      $.get(itemLink, 
       sf, 
       function (response) { 
        row.replaceWith(response); 
       }); 
     }); 

    return false; 
}); 
+0

'3。更新我的表的行以反映更新的數據。「您指的是HTML表格?如果是這樣,你能否顯示HTML標記以及你想添加到表格中的內容。 – Paul

+0

是的,這是一個html表格。請參閱上面的示例。 –

回答

1

你需要做這樣的事情:

$(".form-commands .save").live("click", function (evt) { 
    //Capture the jQuery event object and call preventDefault() to stop the default click action 
    evt.preventDefault(); 
    var f = $(".form-edit"); 
    var sf = f.serialize(); 
    $.post(this.href, 
     sf, 
     function (response) { 
      f.html(response); 
     }); 
    //UPDATE THE ROWS 
    $('#h62 td:eq(0)').text(newVehicleMakeName); 
    $('#h62 td:eq(1)').text(newVehicleModelName); 
}); 

我不知道從您的代碼,其中車輛數據的來源。如果你從你的控制器傳回它,那麼你需要將這條線路移到你的成功回調中。另外,你通常不應該返回false,你應該捕獲jQuery事件作爲參數,並調用preventDefault()。如果您的點擊處理程序使用return false來阻止瀏覽器導航,則會打開解釋程序不會到達返回語句的可能性,並且瀏覽器將繼續執行錨點標記的默認行爲。這是造成你的問題的原因,不是因爲你使用了click和submit。使用event.preventDefault()的好處是您可以將其添加爲處理程序中的第一行,從而保證錨點的默認行爲不會觸發。

+0

感謝您的提示。也許,我需要用新數據更新現有行,而不是創建新行。 Id和其他字段在f變量(表單)中。 –

+0

我很抱歉,我不明白這是一個更新,我認爲這是一個補充。所以你想更新表格行中的現有數據? – Paul

+0

是的。我得到這個工作,但看起來有些醜陋。往上看。 –

0

那麼我只是重新加載頁面或調用ajax例程(以適用者爲準)來重新加載數據,沒有直接的方法來做到這一點。其實我不知道你用的方法(f.html(響應))的,我仍然懷疑這種解決辦法:)

好吧,如果你真的只是想更新單個行:

1)您需要知道在JavaScript代碼中知道更新的行的ID。在這個例子中,這個值是「h62」(沒有引號)。

2)給你的TD分配類名,例如:

<tr id="h62"> 
    <td class="brand">Ford</td> 
    <td class="model">Focus</td> 
</tr> 

3)使用jquery進行更新。假設您將該行的id保存在名爲「rowId」的變量中:

$('#'+rowId).find('.brand').html(response.brand); 
$('#'+rowId).find('.model').html(response.model); 

這將結束該過程。