2010-01-27 33 views
3

我的頁面使用jQuery動態創建行,但是當我刷新表單時,行消失了。使用jQuery動態創建的標籤在我的表單發佈後消失

如何保留MVC中jquery動態創建的控件?

這是一個主詳細信息頁面,我正在創建一個結算詳細信息頁面。細節上有一個按鈕,當你點擊它時會顯示一個詢問詳細信息的對話框。在對話框中單擊確定後,我使用Jquery在細節表上添加新的細節。問題是當你刷新頁面時,動態創建的行消失。

回答

5

互聯網是用JavaScript在客戶端做無國籍

任何不會自動重新加載頁面之間想起,由於互聯網的無狀態特性。通過發佈提交表單會導致頁面重新加載,以致客戶端更改被遺忘。要記住所做的更改,開發人員需要專門編碼存儲方法。

阿賈克斯

當你正在使用JavaScript和jQuery的明確已經,一個ajax呼叫可以被用來通知發客戶端更改的服務器。

jQuery有一個很好的AJAX library。在jQuery tutorials page上有幾個教程可供選擇。還有大量的web pages devoted to the subject

使用jQuery

舉一個簡單的例子阿賈克斯例如,當您添加額外的行,你可以調用一個Ajax功能,如:

$.ajax({ 
    url: 'ajax/add_row.html?user_id=100&data=new-data', 
    success: function(data) { 
    alert('Adding of the row was acknowledged.'); 
    } 
}); 

服務器端

在在服務器端,您只需要一個位於ajax/add_row.html的頁面來完成一些工作,將數據傳遞給它並將其添加到數據庫中。在下一頁重新加載時,可以像往常一樣將添加的數據放到頁面上。

實際上,如果您的數據比這更復雜,最好通過post方法將數據發送到腳本。

0

你使用ajax還是完整的表單文章?

如果你運行一個完整的表格後,頁面將刷新回到其初始狀態,它不會維持通過JavaScript/jQuery的所做的DOM的任何修改。

+0

這解釋了它發生的原因,但它不提供解決方案。 – Eilon 2010-02-14 22:49:54

+0

我假設某人可以使用jQuery動態地將內容添加到頁面中,這對網絡有一定的瞭解。可能是一個疏忽。 – Gregory 2010-02-15 03:17:37

1

您應該將對象列表添加到模型中。使用jquery爲這些行生成正確的名稱。每一行都應該代表一個列表對象。如果使用標籤或跨度而不是輸入生成此表,則此值不會發送到服務器,因此在這種情況下,您應該使用正確的名稱生成隱藏的輸入(例如DynamicObjects [0] .Value1,DynamicObjects [0] .Value2,DynamicObjects [1] .Value1,DynamicObjects [1] .Value2 ...)

你的模型類應該包含屬性

IEnumerable<DynamicObject> DynamicObjects{get;set;} 

原因DynamicObject包含道具值1和值2。

所以你的動作會收到你的模型類與動態對象。

public ActionResult Index(MyModelClass form) 
{ 
// do something 
return View(form); 
} 

您的視圖應該從DynamicObjects arrey構建表。

這是否有幫助?

2

一旦用戶點擊對話框表單上的'ok'並且您動態地向表中添加一行,使用JQuery AJAX methods來調用您的控制器方法以將數據添加到您的數據上下文中,這將意味着新行被保存在服務器端,所以當頁面刷新時,數據將被保存。

例如

$('#okButton').click(function(){ 
    //Add row 

    var data = { 
    detailName: $('#detailName').val(), 
    detailInfo: $('#detailInfo').val() 
    }; 

    $.ajax({ 
    type: "POST", 
    url: "controller/AddDetail", 
    data: data, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(xml, ajaxStatus) { 
    // whatever you want here 
    } 
    }); 
}); 

控制器代碼

public ActionResult AddDetail(string detailName, string detailInfo) 
{ 
    //Save detail 
} 
0

當你到底刷新頁面?您可以使用會話來存儲正在添加/刪除的項目。我同意這是費爾明建議的Ajax操作。

相關問題