我的頁面使用jQuery動態創建行,但是當我刷新表單時,行消失了。使用jQuery動態創建的標籤在我的表單發佈後消失
如何保留MVC中jquery動態創建的控件?
這是一個主詳細信息頁面,我正在創建一個結算詳細信息頁面。細節上有一個按鈕,當你點擊它時會顯示一個詢問詳細信息的對話框。在對話框中單擊確定後,我使用Jquery在細節表上添加新的細節。問題是當你刷新頁面時,動態創建的行消失。
我的頁面使用jQuery動態創建行,但是當我刷新表單時,行消失了。使用jQuery動態創建的標籤在我的表單發佈後消失
如何保留MVC中jquery動態創建的控件?
這是一個主詳細信息頁面,我正在創建一個結算詳細信息頁面。細節上有一個按鈕,當你點擊它時會顯示一個詢問詳細信息的對話框。在對話框中單擊確定後,我使用Jquery在細節表上添加新的細節。問題是當你刷新頁面時,動態創建的行消失。
互聯網是用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方法將數據發送到腳本。
你使用ajax還是完整的表單文章?
如果你運行一個完整的表格後,頁面將刷新回到其初始狀態,它不會維持通過JavaScript/jQuery的所做的DOM的任何修改。
您應該將對象列表添加到模型中。使用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構建表。
這是否有幫助?
一旦用戶點擊對話框表單上的'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
}
當你到底刷新頁面?您可以使用會話來存儲正在添加/刪除的項目。我同意這是費爾明建議的Ajax操作。
這解釋了它發生的原因,但它不提供解決方案。 – Eilon 2010-02-14 22:49:54
我假設某人可以使用jQuery動態地將內容添加到頁面中,這對網絡有一定的瞭解。可能是一個疏忽。 – Gregory 2010-02-15 03:17:37