2013-01-24 51 views
4

我正在用ajax編寫MVC3應用程序,並且我遇到了一種情況。好習慣mvc條件按鈕及其代碼

只有條件爲真時,我才必須顯示na按鈕。好吧,它很容易做到。

@if (Model.AAA == ENUM.AAA) 
    { 
     <button>OK</button> 
    } 

但是這個按鈕會調用一個ajax函數。

現在我的疑問是,在哪裏放置我的AJAX代碼?

如果我這樣做:

@if (Model.AAA == ENUM.AAA) 
    { 
     function OK(){ 
      $.ajax({}); 
     } 

     <button>OK</button> 
    } 

它的聲音醜陋的代碼! 它是代碼,它不是在正確的位置,但ajax代碼是「安全的」,我的意思是,只有當按鈕存在時,ajax代碼纔會存在。

但是,如果我把我的代碼放在頭部分,高級用戶將能夠調用ajax函數。

,或者類似這樣的

<head type="text/javascript"> 
    @if (Model.AAA == ENUM.AAA){ 
     function OK(){ 
     $.ajax({}); 
     } 
    } 
</head> 
.... 
<body> 
    .... 
    @if (Model.AAA == ENUM.AAA) 
    { 
     <button onclick="OK()">OK</button> 
    } 
    .... 
</body> 

一個做出@if條款附上劇本,我會複製代碼那麼,什麼是要面對這種情況,最好的辦法最好的做法是什麼?

回答

1

服務器應控制請求調用並檢查正確的狀態。 @Andrew Barber指出了這一點,但這不僅僅是讓瀏覽器打開。但是高級用戶可以與其他沒有權限的用戶共享ajax請求,或者惡意使用它。

試圖更深入地回答問題,它可能不是像這樣的簡單腳本,而是文件或一些JS庫,也許你沒有控制你的ajax訪問的服務器。在這種情況下,您可能想要複製驗證。

2

只是有一個條件在您的標記,就像你有:

@if (Model.AAA == ENUM.AAA) 
{ 
    <button id="OkButton">OK</button> 
} 

然後調整你的Javascript略微讓你不包括剃鬚刀(這樣就可以提取到外部JS文件):

<head type="text/javascript"> 

    WireUpButton(); 

    function WireUpButton() { 
     var okbutton = document.getElementById("OkButton"); 

     if (okbutton) { 
      okbutton.onclick = OK; 
     } 
    } 

    function OK(){ 
    $.ajax({}); 
    } 
</head> 
3

這聽起來像是你想使用存在/缺少一段Javascript代碼來控制訪問服務器上的調用。 不要那樣做

您的服務器應該總是正在評估該操作是否可以在此刻被用戶調用。如果用戶在瀏覽器中打開該頁面,並且發生了一些應用程序狀態更改會阻止用戶調用該操作...但他們的瀏覽器仍顯示該按鈕會怎麼樣?或者,如果一個聰明的用戶決定通過在源代碼中尋找來玩弄你的URL?

我會建議只是把JavaScript放在一個共同的位置,並從那裏調用它,因爲這會保持你所有的Javascript在一起。

+0

嚴。我認爲我明白了。關鍵是,SERVER SIDE VALIDATIONS,對吧?所以,如果我按照這個想法最好的地方javascript/ajax代碼是頭部分..對嗎?謝謝 – Aitiow