2012-06-11 31 views
2

如何強制Ajax.BeginForm(MVC3,不顯眼)做完整的回發?Ajax.BeginForm force full postback

在MVC2中,我剛剛清除了「onclick」和「onsubmit」處理程序。我如何在MVC3中做到這一點?

//does not work in MVC 3 with unobtrusive ajax :((
$('#myForm').unbind('click'); 
$('#myForm').unbind('submit'); 

PS。如果你有興趣,我需要這個文件上傳。如果沒有文件正在上傳 - 阿賈克斯是好的。如果一個文件正在上傳 - 讓它做一個完整的回發。

更新:

看 「jquery.unobtrusive-ajax.js」 源代碼後,我看到了這一點:

$("form[data-ajax=true]").live("submit", blahblah); 

所以我想出了這個和它的作品:

$("form[data-ajax=true]").die("submit"); 

但這似乎有點「哈克」,任何「合法」的方式來清除窗體上的所有onsubmit事件?我想現在更新的問題是:如何清除使用不同選擇器的「die」語句的「活動」事件處理程序?

回答

1

如果你修改不顯眼的庫..你可以檢查提交事件處理程序,表單是否包含任何文件,如果是,然後通過AJAX做一個完整的POST其他。

$("form[data-ajax=true]").live("submit", function (evt) { 
    var clickInfo = $(this).data(data_click) || []; 
    evt.preventDefault(); 
    if (!validate(this)) { 
     return; 
    } 

    if ($("input[type=file]", this).val()) { 
     this.submit(); 
    } 
    else { 
     asyncRequest(this, { 
     url: this.action, 
     type: this.method || "GET", 
     data: clickInfo.concat($(this).serializeArray()) 
     }); 
    } 
    });