2014-07-01 112 views
0

我有如下的方法:如何從一個按鈕,點擊asp.net調用靜態方法

public static void UpdateAll() 
    { 
     // Updates database 
    } 

,我有一個MVC應用程序,視圖(爲了清楚起見移除線)如下:

<button id ="btn">Update</button> 
//... 
<script> 
    $('#btn').click(function() { 
     @{ 
      project.models.settings.UpdateAll(); 
     } 
    }); 
</script> 

project.models.settings.UpdateAll()方法後立即觸發頁面加載。有沒有一種方法來加載這個方法,只有一次用戶點擊了按鈕?

爲了測試我沒有用簡單的console.log替換方法,並且按照預期工作。

任何指針,例子都非常感謝。

親切的問候

+0

需要AJAX使用,然後 –

+0

只是使用AJAX,如果你不知道如何,學習它,你會受益匪淺。 –

回答

0

你所做的事情是行不通的。

該方法將在視圖加載時調用,因爲它是服務器端代碼,它將在視圖渲染時執行。

這麼稱呼用ajax的行動,並在行動調用此方法:

$('#btn').click(function() { 
     $.ajax({ 
        type: "GET", 
        url: '@Url.Action("MyAction","My")', 
        success: function(data) { 

        }, 
        error: function(result) { 
        alert("Error"); 
        } 
     }); 
    }); 

寫在控制器的動作:

public void MyAction() 
{ 
project.models.settings.UpdateAll(); 
} 
+0

謝謝。我完全接受這種情況,並認爲如此。我想知道是否有一個屬性可以讓我神奇地想出來。看起來像Ajax和控制器要求我!謝謝你們 – James

1

我認爲你缺少的Web應用程序是如何工作的一個基本的瞭解。

將以下內容放入視圖中時,您聲明的是服務器端代碼塊,將在服務器端處理視圖時執行。

@{ 
    project.models.settings.UpdateAll(); 
} 

它,當你用的console.log更換工作的原因是console.log是客戶端代碼,並執行客戶端(即瀏覽器)。

要從客戶端代碼(您的按鈕單擊事件處理程序)調用服務器端代碼(您的UpdateAll方法)的唯一方法是通過進行AJAX調用。

最簡單的事情是首先將您的UpdateAll方法作爲控制器操作。通常,對於響應AJAX調用的操作,我喜歡創建單獨的控制器,但這不是絕對必要的。

public ServiceController : Controller 
{ 
    public ActionResult UpdateAll() 
    { 
    } 
} 

現在從您的客戶端代碼對該操作進行AJAX調用。

相關問題