2012-11-21 18 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

是的,它是空的。请查看更新后的问题。 –

相关问题