2012-04-17 82 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