我有一個表,並且我已經動態地添加/刪除了它的行。 該表包含將作爲MVC回收的字段。 在這種情況下更新與jQuery表意味着我了包含例如不完全的集合的集合......JQuery MVC集合名稱屬性
function add() {
$.ajax({
url: "GetRow",
type: 'post',
dataType: 'html',
timeout: 30000,
data: {
RowIndex: otherRows.length,
"Item.Property1": $("option:selected", dropDown).text(),
"Item.Property2": $("option:selected", dropDown).val()
},
success: function (result) {
var newRow = $(result);
tableBody.append(newRow);
}
});
}
此功能使Ajax調用去獲得一個MVC操作結果返回一行結果在給定的索引,並額外設置一些默認值從我的網頁下拉。
現在讓我們假設我有一個類似的函數稱爲「刪除」,其中使用jquery我刪除一行,在這一點上表有3行(當然忽略頭行),我要刪除的行是中間一排。
這意味着在我行的字段最終看起來像這樣...
//Row 1:
<input type="text" name="SomeCollection[0].Property1" />
//Row 2:
Nothing, deleted of course
//Row 3:
<input type="text" name="SomeCollection[2].Property1" />
所以,如果我現在做的回傳,因爲不一致的ID範圍時,MVC模型綁定只會結合項目1和我的項目2(實際上是客戶端刪除之前的項目3)未映射。
這個想法是,我希望我的服務器邏輯做一個非常簡單的「如果我的集合中的項目的ID不在發佈數據中,將它從數據庫中刪除」,這樣所有的集合操作都可以完全是客戶端,保存在這個非常重的頁面上的不斷回發。
於是我開始把一個函數一起jQuery來解決這個問題...
function updateNames(table) {
var rows = $("tr", table);
var index = 0;
rows.each(function() {
var inputFields = $("input");
inputFields.each(function(){
//replace name="bla[<any number>].Anything" with
// name="bla[" + index + "].Anything"
});
index++;
});
}
所以我的問題是...我怎麼向jQuery的說,在與name屬性「替換[] [指數]」?
我知道這不會解決嵌套集合/其他這樣的複雜場景的問題,但一旦我有這個功能解決了我可以隨時擴展它,我的要求並沒有涉及到。
編輯:
對我目前的思維模式,一些額外的細節...好還是壞?
如果我抓住名稱屬性值和「散步字符」,直到我找到第一個「[」和下一個「]」,然後替換之間的一切,它應該解決我的問題,但這種類型的東西在IE可能像地獄一樣慢。
任何人都有一個整潔的「只是稱這個聰明的功能」類型的答案? (如果有的話)。
編輯2:
哇,我真的要更努力...我覺得什麼是蠢蛋一樣,現在有2個原因(不看和正則表達式是這裏一個顯而易見的解決方案)
JQuery: how to replace all between certain characters?
如果我能找出正確的正則表達式,我已經得到了我的解決方案(也許這是我應該問的問題,因爲我經常被正則表達式的瘋狂所困擾)。
但正則表達式的電源不能低估:)
這是關於我到了哪裏,我似乎無法得到它的工作,雖然由於某種原因。 – War 2013-05-04 14:20:49
究竟是什麼「不工作」呢?這也是我接觸到的解決方案。 – 2013-05-04 14:25:15
大聲笑好,我們都犯了第一個錯誤......是第二個選擇器正在尋找文件廣泛。設置var inputFields – War 2013-05-04 14:30:04