2010-01-18 43 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