2010-01-18 42 views
1

我在控制器(HomeController.cs)中有一些代碼從我的視圖中的$ .get方法中調用。

查看代碼

 $(document).ready(function() { 
     $.get("/Home/Toolbar", function(result) { 
      $("body").prepend(result); 
     }); 
    }); 

HomeController.cs

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Toolbar() 
    { 
     if (Request.IsAuthenticated && Roles.IsUserInRole("Agents")) 
      return PartialView("toolbar"); 

     return new EmptyResult(); 
    } 

我在這裏的問題是EmptyViewResult返回到JS後,代碼不 「後返回」控制器了。如果我刪除了「if」條件並且簡單地返回PartialView,那麼一切正常。

我想只在DOM中包含「工具欄」部分視圖,當用戶在「代理」角色。

+0

注意:在ajax請求中返回原始HTML需要麻煩。 – 2010-01-18 15:51:09

+0

在ajax中返回PartialViewResult是要求touble?我看到這種類型的事情在很多asp.net mvc示例中完成?怎麼會這樣? – 2010-01-18 17:21:16

回答

2

既然它看起來並不像你在actionresult中做了很多定製邏輯,爲什麼不只是有條件地在你的site.master(或者適當的地方)中包含PartialView呢?由於它不是真正的動態(至少基於我在控制器中看到的),因此開放另一個HTTP連接並通過AJAX抓住它似乎很浪費。

+0

你描述的是什麼,我之前正在做的是什麼,但是我想通過ajax加載「工具欄」的原因是因爲我會得到在jQuery中使用效果的能力。例如,如果我有條件地將其包含在母版頁中,那麼它將在沒有AJAX的情況下被加載到DOM中,並且我不能使用「幻燈片」效果向下滑動工具欄div。也許有另一種方式?這正是我所經歷的。做這種事情的最好方法是什麼?我的方法是「最佳實踐」嗎? – 2010-01-18 17:24:37

+1

一個更好的方法是最初隱藏你想使用jQuery動畫的部分 - 比如說,使用CSS display:none;'。在頁面加載後立即加載Ajax不是實現你想要的正確方法。 – 2010-01-18 20:06:32