我想要做一些應該很簡單的事情。我發現shortcut.js 並正在使用它來完成請求。當他們按/鍵入CTL-S時,我需要做一個頁面保存。一個正常的odl學校同步電話很好。jquery表單提交的ASP.Net格式:request(txtname)<> txtname.text
[是,CTL-S通常會在HTML頁面保存到一個文件中。]
首先我要解釋這個問題,那麼我將通過細節行走。 這是綁定快捷方式的js代碼片段。只需調用按鈕單擊事件...
shortcut.add("F11", function(){
$('#ctl00$cp1$btnSave').click();
}
);
在調用快捷方式時,會捕獲擊鍵並觸發保存按鈕。我的代碼被調用。
看來HTTP請求中的FORM值沒有被映射到控制變量。我可能不會說這是正確的...考慮這個: 這裏ctl00 $ cp1 $ txtname是textBox控件的uniqueId。
request('ctl00$cp1$txtname') = "newValue"
txtname.text = "oldvalue"
如果我回去,然後點擊按鈕W我的鼠標,同一個按鈕,同樣的形式....
request('ctl00$cp1$txtname') = "newValue"
txtname.text = "newvalue"
這是form.load的情況。因此,無論何時這種映射正在發生/未發生,它都處於頁面生命週期的早期階段。 這不是唯一的特定控件。所有的控件遭受同樣的問題。
這裏是在設計時SAVE按鈕
<asp:Button ID="btnSave" runat="server"
Text="Save" class="submit" CssClass="buttonblue" UseSubmitBehavior="false" />
這裏是個什麼樣子,當它被渲染
<input type="button" name="ctl00$cp1$btnSave" value="Save" onclick="javascript:__doPostBack('ctl00$cp1$btnSave','')" id="ctl00_cp1_btnSave" class="buttonblue">
我注意到像在思考的DOM級別,點擊鼠標應該消防__doPostBack。沒有更多,不少。所以我更改快捷方式代碼做同樣的
shortcut.add("F11", function(){
__doPostBack('ctl00$cp1$btnSave', '');
}
);
這不能解決問題。 再次,這是客戶端的東西,沒有什麼真正棘手的事情。一看頁面的源代碼顯示__doPostBack呈現這樣
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
雖然我在這,我也嘗試
shortcut.add("F11", function(){
$('#aspnetForm').submit();
}
);
這也不能解決問題。
我不想做任何聰明,甚至是異步的事情,我只想通過JS提交表單。
我的主要問題是:爲什麼asp.net的行爲不如我預期的那樣。 具體而言,它爲什麼不將request.form值映射到控制變量。
我會認爲 a)點擊按鈕 b)調用(#btn)。點擊() c)調用__doPostback(與點擊將使用完全相同的參數)
將產生相同的結果。
我沒有理解這裏的東西。
一個有趣的數據點是,我得到通過調用(「#form」)同樣不受歡迎的行爲。提交()