2011-10-17 220 views
1

我具有控制器列出如下:淨MVC視圖不渲染

// 
// GET: /Customer/Details/5 
public ActionResult Details(short id) 
{ 
    ActionResult actionResult = null; 

    if (HttpContext.User.IsInRole("Admin")) 
    { 
     // this is the logic that is getting executed 
     YeagerTechWcfService.Customer cust = db.GetCustomerID(Convert.ToInt16(id)); 
     actionResult = View("Details", cust);   } 
    else 
    { 
     HttpCookie cn = Request.Cookies["strCookieName"]; 
     if (cn != null) 
     { 
      YeagerTechWcfService.Customer cust = db.GetCustomerID(Convert.ToInt16(id)); 
      actionResult = View("Details", cust); 
     } 
     else 
     { 
      TempData["ErrCode"] = "CustView"; 
      actionResult = RedirectToAction("Index", "Home"); 
     } 
    } 

    return actionResult; 
} 

我有一個視圖(其中ActionLink的是)象下面這樣:

columns.Template(
    @<text> 
    @Ajax.ActionLink("Detail", "Details", "Customer", new { id = item.CustomerID }, 
    new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "detailCustomer" }) 
    </text> 
).Width(70); 

渲染輸出現在是如下:

<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#detailCustomer" href="/Customer/Details/2">Detail</a> 

如果我點擊從瀏覽器的源代碼視圖中,我到我的新視圖就好了。

但是,如果我嘗試點擊ActionLink,則視圖不會出現。我可以在調試過程中驗證,當我點擊該控制器代碼後,我正在通過詳細信息視圖。目前的觀點只是保持原位而不切換到新的視圖。

而且,我可以看到,如果我點擊ActionLink的,它執行完全相同的代碼(在調試期間),當我將其粘貼到地址欄

的http://本地主機:4514 /客戶//2

當我點擊ActionLink的,即使相同的代碼被執行詳細信息,地址URL不會改變上述情況。和視圖不呈現。

我在做什麼錯?

回答

5

即使執行相同的代碼,地址URL沒有您使用的是Ajax.ActionLink這意味着它將發送一個AJAX請求改變 上述

。 AJAX的重點在於保持在同一頁面上,而不是重定向。

您表示UpdateTargetId = "detailCustomer"所以一定要確保在你的頁面你有一個容器與此ID:

<div id="detailCustomer"></div> 

將與AJAX調用的結果進行更新。另外,請確保您已將jquery.unobtrusive-ajax.js腳本正確地包含在您的頁面中,以便幫助Ajax.ActionLink幫助程序執行任何有用的操作。

在另一方面,如果你要執行一個完整的回傳,改變你的瀏覽器的URL,你可能需要一個標準的鏈接:

Html.ActionLink("Detail", "Details", "Customer", new { id = item.CustomerID }, null) 
+0

達林,你是絕對正確的......我完全忘了我發送一個AJAX請求,這將使我保持在同一頁面上,而不是重定向。我可以將其更改爲您建議的HTML鏈接,或者在我的網格中執行AJAX回發以保持在同一頁面上。對於細節,我會做一個HTML鏈接,對於編輯,我會保持它的AJAX鏈接,並讓用戶執行內聯編輯。非常感謝。 – sagesky36