2013-08-07 59 views
1

我想讓用戶使用jQuery和無AJAX將項目添加到視圖模型。使用jQuery和無Ajax添加新項目

我不想使用ajax的原因是因爲如果沒有ajax用戶,必須點擊保存,這樣他們創建的機會會不小心改變。

我有它的工作,但它似乎有點黑客。

'<tr>'+ 
'<td class="detail-priority">' + 
'<input id="ComplianceSeverityLevel_4__ComplianceSeverityLevelId" type="hidden" value="-1" name="ComplianceSeverityLevel[4].ComplianceSeverityLevelId" data-val-required="The ComplianceSeverityLevelId field is required." data-val-number="The field ComplianceSeverityLevelId must be a number." data-val="true">' + 
'<input id="ComplianceSeverityLevel_4__Priority" class="valid" type="text" value="0" name="ComplianceSeverityLevel[4].Priority" data-val-required="The Priority field is required." data-val-number="The field Priority must be a number." data-val="true">' + 
'</td>' + 
'</tr>' 

我基本上只是複製ASP.NET MVC生成的HTML,將ID值設置爲-1,以便它知道要創建一個新條目。

我也必須生成數組索引。這似乎不是一個最佳的方式來解決這個問題。關於這個問題有幾篇文章,但都涉及阿賈克斯。

無論如何,我可以更有效地做到這一點?

+1

請停止將「ASP.NET MVC」簡稱爲「MVC」。一個是框架,而另一個是獨立於語言的設計模式。這就像調用IE - 「互聯網」 –

+0

我假設你的意思是ASP.NET MVC? –

+0

是ASP.NET MVC。我很抱歉,我對它很陌生。 –

回答

1

你可以做的是在你的控制器中爲模型添加一個「新」項目(或者如果你喜歡的話,在你的視圖中)。這樣你的收藏至少有一件物品。

現在,您不需要添加硬編碼的HTML(您必須在更改視圖時更新該HTML),您可以.clone()頁面上的最後一項並更新必要的ID。

提交時,可以禁用HTML中最後一項的輸入字段,以便不包含空項目,也可以檢查服務器端以排除最後一項。

+0

這是一個好主意,但我想不出一個足夠強大的正則表達式來更新所有的ID。如果我用'2'替換'1',我可能會損害其他數據。 –

+0

您可以檢查'_1'或'_1__'。如果你仍然擔心,你可以硬編碼「ComplianceSeverityLevel_」。是的,它是硬編碼的,但比硬編碼所有HTML要好得多。 – Stijn

+0

我想我可能必須這樣做,我看不到任何其他選擇。感謝您的幫助。我會在這個晚上打開這個話題,看看是否有其他建議。 –