2012-09-24 73 views
0

我如何轉換 $("#myChildTabName").load("./MyController/MyMethod/" + myParameter); 使用@url.ActionMyMethod返回一個PartialView。基本上我是我想加載一個部分視圖上點擊標籤。MVC剃刀jQuery的局部視圖渲染

更新如下: 我有如下想出了一個解決方案,但是這給了一個錯誤說applicationID不會在當前的背景下存在。 jQuery調用上方的警報確實顯示applicationID

//The below code DOES NOT work. 

function LoadTabContents(applicationID) 
{ 
     $("#currentTab").load('@Url.Action("TabMethod", "MyController", new { @id = applicationID })') 
} 

//The below code works fine. 

function LoadTabContents(applicationID) 
{ 
     $("#currentTab").load('@Url.Action("TabMethod", "MyController", new { @id = 123})') 
} 

回答

4

恐怕你正在嘗試做的事不能通過剃刀完成。 applicationID必須附加在客戶端,因爲只有客戶端知道實際值。你可以嘗試這樣的:

function LoadTabContents(applicationID) { 
    $("#currentTab").load('@Url.Action("TabMethod", "MyController")' + '/'+ applicationID); 
} 

URL.Action將生成正確的路徑,其餘的將追加分階段的JavaScript函數的參數。有的擺弄必須用斜槓來完成,因爲我不記得,如果URL.action將追加一個或不...

+0

那麼,我親愛的朋友,就像一個魅力。非常感謝你。 – daniele

0

1。在這種情況下,你不應該使用partial方法,如果你通過請求加載數據,你應該使用return View(),而不是部分View。但是,如果你想添加一些HTML視圖你應該使用partial.And在這種情況下部分意味着主視圖的一部分。

如果你想避免使用主要佈局 - 設置屬性layout=string.Empty

2。您可以使用POST加載方法並使用,在這種情況下,您不能使用load(),因爲它是GET請求。基於方法類型偏VS查看您$ .POST或$就

public ActionResult Index() 
     { 
      if (Request.IsAjaxRequest()) 

       return PartialView("partialView"); 
      else 
       return View(); 
     } 
  1. 簡單的選項設置佈局,如:

@ { 佈局=請求.IsAjaxRequest()? null:「〜/ Views/Shared/_Layout.cshtml」; }

+0

感謝安頓工作,但這不是我正在尋找的答案。 – daniele

1

@Url.Action - 是服務器代碼,您只能在Razor Views中使用它。看看這個問題ASP.NET MVC Url.Action in JQuery is not recognized

+0

函數LoadTabContents(applicationID){$(「#currentTab」).load('@ Url.Action(「TabMethod」,「MyController」,new {@id = 123})')} - 可以正常工作。現在我需要傳遞一個正確的參數值,而不是硬編碼的123. – daniele

+0

@daniele即使更新,我的答案也是正確的,在服務器上生成「@ Url.Action」,並且您的函數在客戶端上運行。 – webdeveloper

+0

感謝您的建議webdeveloper。沒有理由認爲你的代碼可以正常工作。但我的問題是如何修復代碼,以便它將applicationID傳遞迴服務器。 – daniele

0

可能是這個解決方案會爲你

$("#currentTab").load('@Url.Action("TabMethod", "MyController", new { @id = "[APPLICATION_ID]"}).replace("[APPLICATION_ID]",applicationID)')