【问题标题】:How can i get the actual controller in post method如何在 post 方法中获取实际控制器
【发布时间】:2012-04-17 16:08:21
【问题描述】:

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

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

当我添加标签时,它会进入标签控制器创建发布方法,此时我希望能够获得将它发送到那里的控制器操作(在本例中为项目)。看过UrlReferer这个类,有没有比那个更好的方法来获取控制器?

我需要这个的原因是我希望能够做类似的事情

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

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

Edit 最终再次使用了这个想法。去了

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") });

【问题讨论】:

  • @ChristoferEliasson 基本上原因是我希望单曲的 json 更新下拉列表,如果它不是列表视图。否则我希望索引视图部分刷新。

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


【解决方案1】:

你有几个选择:

  1. 您可以查看引用 URL(除非您需要访问类中的某种方法或属性,否则获取引用 URL 字符串、解析控制器名称然后创建控制器类的实例是没有意义的;我只想看看字符串)。
  2. 您可以包含一个隐藏的输入,其中包含控制器名称。
  3. 您可以在 session 中存储一个值(这似乎有点过头了;记住,会为此创建一个 cookie)来记住用户来自哪个页面。

选项 1 和 2 可能在您的服务器收到值之前被篡改。

【讨论】:

  • 我最终从 js 调用中附加了一个布尔值,用于判断它是否是标签控制器,但对选项进行了很好的总结
猜你喜欢
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多