2015-04-08 61 views
0

我有兩個名爲Contact和About的HttpPost控制器操作。我有一個JavaScript函數將相關的表單屬性(它的動作,方法等)轉換成一個AJAX請求,然後用返回值/響應做一些事情。當通過AJAX呼叫時,控制器操作不執行

但是,當我調用JavaScript函數時,只有JavaScript部分運行,而MVC服務器端代碼未被調用。

任何人都可以幫忙嗎?

聯繫

[HttpPost]   
public string Contact(string id) 
{ 
    return "OK"; 
} 

關於

[HttpPost] 
public string About(string id) 
{ 
    return "OK2"; 
} 

腳本

$('form').submit(function() { 
    if ($(this).valid()) { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function (result) { 
       $('#myForm').html(''); 
       $('#result').html(result); 
      } 
     }); 
    } 
    return false; 
}); 

});

+0

'return false;'取消默認提交操作。您需要提交表單視圖ajax並處理其成功回調的返回值。 「關於」頁面是否真的是POST? –

+0

你可以給一個鏈接或寫一個JavaScript函數嗎? – htcszgn

+0

[jQuery.ajax](http://api.jquery.com/jquery.ajax/) –

回答

0

假設下面的自提沒提具體...

我想像你的網頁排序的結構類似這樣:

<body> 
    <form action="/Home/About" method="POST"> 
    <input type="hidden" name="id" value="1"> 
    <button type="submit">About</button> 
    </form> | 
    <form action="/Home/Contact" method="POST"> 
    <input type="hidden" name="id" value="2"> 
    <button type="submit">Contact</button> 
    </form> 
    <div id="result"></div> 
</body> 

<body> 
    <form action="/Home/About/?id=1" method="POST"> 
    <button type="submit">About</button> 
    </form> | 
    <form action="/Home/Contact/?id=2" method="POST"> 
    <button type="submit">Contact</button> 
    </form> 
    <div id="result"></div> 
</body> 

如果是這樣,它應該工作。

請注意,每個表單都包含一個名爲id的輸入元素,或者id在表單action屬性中以查詢字符串的形式附加。這是重要由於MVC路由和模型綁定取決於此,因爲您的控制器操作需要一個id參數。即public string Contact(string id)

此外,還要確保你的行動是否正確形成也就是說,如果你使用的是默認操作,確保控制器名稱是路線的一部分(也就是說,如果你的控制器被稱爲的HomeController和你的行動是聯繫,MVC會如果使用自定義路由條目,則忽略此項

爲什麼服務器端操作可能不會被命中的另一個原因是:由於你的表單方法,你的例子期望爲POST,但是如果你的表單方法是PUTGET或其他東西,它也不會打它。

如果你堅持這3件事情,你可能不會有問題。