如何在post方法中获得实际的控制器

时间:2012-04-17 16:08:22

标签: c# jquery json asp.net-mvc-3

我有两个控制器Project和Tag,它们都有一个create view和get post方法。

在Project创建视图中,我可以选择添加标签,该标签打开带有标签创建视图的对话框。

当我添加标签时,它会转到标签控制器创建post方法,此时我希望能够获得将其发送到那里的控制器操作(在本例中为Project)。我见过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") });

1 个答案:

答案 0 :(得分:4)

您有几个选择:

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

    选项1和2 可能被篡改。