2012-04-17 73 views
1

我有两个控制器项目和标签,这两个控制器都有创建视图和获取发布方法。我怎样才能得到实际控制器在后方法

从项目创建视图中,我可以选择添加一个标签,该标签用标签创建视图打开一个对话框。

当我添加标签到标签控制器创建发布方法,我希望能够获得发送它的控制器操作(在这种情况下,项目)。我见过UrlReferer类,有没有比这更好的方法来获得控制器?

我需要的,这是我希望能够像做

  if (Request.IsAjaxRequest()) 
      { 
       if (REFERER CONTROLLER != Tag Controller) 
       { 
         return Json(new { Item = item, Success = true }); 
       } 
       else 
       { 
        return RedirectToAction("Index"); 
       } 
      } 

所以基本上如果对话框是在另一个控制器则返回新值的JSON否则返回索引操作的原因

编辑最后再次使用这个想法。去了

if (Url.IsLocalUrl(Request.UrlReferrer.AbsoluteUri) && !String.Equals(Request.UrlReferrer.LocalPath.TrimEnd('/'), Url.Action("Index"), StringComparison.OrdinalIgnoreCase)) 
{ 
    return Json(new { Item = item, Success = true, Field = String.Format("#Selected{0}s", ControllerName) }); 
} 
return Json(new { Success = true, Field = "#mainContent", Url = Url.Action("Index") }); 
+0

你为什么想这样做? – 2012-04-17 16:11:12

+0

@ChristoferEliasson基本上原因是我想单个json更新下拉列表,如果它不是列表视图。否则我想索引视图刷新部分。 – Manatherin 2012-04-21 21:38:51

回答

4

您有几种选择:

  1. 你可以看一下引用URL(有服用引用URL字符串,解析出控制器的名称,然后创建的实例没有点你的控制器类,除非你需要访问类中的某种方法或属性;我只会看字符串)。
  2. 您可以包含一个包含控制器名称的隐藏输入。
  3. 你可以在session中存储一个值(这看起来像是矫枉过正;记住,会为此创建一个cookie)来记住用户来自哪个页面。

选项1和2 可以与您的服务器接收值之前被篡改。

+0

我已经结束了从js调用追加一个布尔值是否它是标签控制器,但一个很好的总结选项 – Manatherin 2012-04-17 17:20:21