2011-08-18 25 views
1

我確信這是關於jQuery/MVC3的東西,我還沒有想出來,所以如果有人能告訴我爲什麼會出現這種情況。@ Url.Action在隨後的調用中返回不同的結果

當我多次調用一個動作例程時,@ Url.Action例程返回不同的字符串。

無論被調用多少次,以下工作。

function DeletePhone(delId) 
{ 
    var va = $("#idPhoneNumberView *").serializeArray(); 
    $.ajax({ 
     url: '@Url.Action("DeletePhone", "Player")/' + delId, 
     data: JSON.stringify(va), 
     type: 'POST', 
     contentType: 'application/json', 
     dataType: 'html', 
     success: function (resp) 
     { 
      var ev = document.getElementById("idPhoneNumberView"); 
      ev.innerHTML = resp; 
     }, 
     error: function (x) 
     { 
      alert(x.status); 
     } 
    }); 
}; 

該程序僅在第一次運行。

function DeletePhone(delId) 
{ 
    var va = $("#idPhoneNumberView *").serializeArray(); 
    $.ajax({ 
     url: '@Url.Action("DeletePhone", "Player")/' + delId, 
     data: JSON.stringify(va), 
     type: 'POST', 
     contentType: 'application/json', 
     dataType: 'html', 
     success: function (resp) 
     { 
      $("#idPhoneNumberView").html(resp); 
     }, 
     error: function (x) 
     { 
      alert(x.status); 
     } 
    }); 
}; 

URL爲 「/ MVC /播放/ DeletePhone/0」 在首次調用 ,它是 「/ MVC /播放/ DeletePhone/0/0」 在隨後的電話,因爲我得到了404在錯誤函數顯示的第一個調用之後,這是可以理解的給定的url。

當我使用jQuery $(「#idPhoneNumberView」).html(resp)時,處理是不同的,所以如果有人能讓我加快速度它將不勝感激。

我想確定我對此很清楚。 在代碼中的唯一區別是作品和不使用jQuery,而不是直接在成功函數中使用getElementById。

我不明白如何使用jQuery html方法導致@ Url.action方法在後續調用中創建不同的路徑。 Scott

+0

響應包含什麼內容? – ShankarSangoli

+0

您的delId來自哪裏?它可能在進入DeletePhone之前被更改? – Henry

回答

3

Url.Action部分基於用於生成請求的當前url。如果請求是/那麼這就是所有生成的網址,因爲它與您所在的頁面相同。如果您打算使用不同的controlleraction,那麼它將只生成一個只包含您指定值的網址。

例如:在/home/action/1上有一個Url.Action("action", "home")在該視圖中,得到的路徑將是相同的頁面,因此只會使用傳遞的url而不是生成新的url。 (奇怪的行爲對我來說,現在我看到它)

不幸的是,我所知道的唯一的解決辦法是做到以下幾點

@Url.Action("DeletePhone", "Player", new { id = UrlParameter.Optional }) 

(假設你使用的是默認的路由,其中​​{id}是參數名稱