2012-11-21 54 views
2

可以說我有_Layout.cshtml在那裏我有這樣的:如何佈局的HTML代碼使用它的一個視圖改變

@if (ViewBag.SignUpURL == null) 
     { 
      <a href="@Url.Content("~/Home/Join")" ><span> 
       <strong>JOIN NOW!</strong></span></a> 
     } 
     else 
     {   
      <a href="@ViewBag.SignUpURL" ><span> 
       <strong>JOIN NOW!</strong></span></a> 
     } 

當我嘗試填充ViewBag.SignUpURL

public ActionResult Index() 
     { 
      ViewBag.SignUpURL = HttpContext.Request.Url.AbsoluteUri.Replace("Index", "SignUp"); 

      return View(); 
     } 

Index視圖使用_Layout.cshtml

並沒有任何反應......

總的來說,我需要以某種方式數據從頁Layout頁使用它。

可以嗎?

謝謝!

UPDATE:

enter image description here

+1

是的,這是它應該工作的方式。你確定'HttpContext.Request.Url.AbsolutePath'不是以某種方式引發異常,在其他地方處理導致'ViewBag.SignUpURL'爲空? –

+0

@大衛把它像一個答案...該死!我已經使用其他_Layout頁面...這是工作,因爲你說... HA :) –

+0

爲什麼不只是在視圖中使用Html.ActionLink助手? –

回答

2

您應該考慮使用Html.RenderAction()然後將返回到控制器操作您指定的,你就可以回到一個局部視圖它的模型:

查看:

@Html.RenderAction("GetSignUp") 

控制器行動

public ActionResult GetSignUp() 
{ 
//do your logic here 

    return PartialView("_SignUp"); 
} 
+0

不,不,我需要以某種方式使用TempData或ViwBag,或者至少我可以使用Session對象將數據傳遞到「佈局頁面」並在其中更改HTML。我只是試圖使用ViewBag,它不工作...我鼓勵它必須...... –

+0

這就是我投票少做一個RenderAction只是爲了執行部分視圖的請求。我個人只需在你的_layout頁面中添加@ Html.Partial(「_ TestPartialView」)即可。除了設置可以在任何操作中完成的viewbag屬性之外,這裏沒有涉及的邏輯....更新Peretz:他不是說不使用ViewBag。他只是重新組織自己的邏輯,以便將其納入自己的局部視野。我寫了一個2分鐘的測試用例,以及bobek的建議。 – Khepri

+0

@Khepri Cool ...但仍然...我相信我將正確的值分配給ViewBag,我猜測在佈局頁面中使用它...但沒有成功..請看看更新的問題。 –

1

一切都很好。您可以使用ViewBag將一些數據傳遞給Layout。 但我認爲HttpContext.Request.Url.AbsolutePath由於路由規則不包含Index

+0

感謝您的意見!我確信我有它1)我有特殊的路線2)我已經調試過它。所以它就在那裏...... –

+0

@Peretz和你在佈局上有哪些ViewBag.SignUpURL值?空值? –

+0

是的,它是空的。請查看更新後的問題。 –

相關問題