【问题标题】:ASP.net MVC 5 ViewBag using Razor使用 Razor 的 ASP.net MVC 5 ViewBag
【发布时间】:2017-05-04 20:58:37
【问题描述】:

大家好,我是 MVC/Razor 的新手,我只想在视图页面上显示一年。

查看页面代码:

<p>&copy; @Html.Raw(ViewBag.theDate) - Switchboard</p>

还有我的控制器代码:

public String getYear()
{
    ViewBag.theDate = DateTime.Now.Year.ToString();

    return View(ViewBag.theDate);
}

在 IE 中查看页面时,它只是打印出来:

© - 总机

如何使用 Razor 从我的视图中调用该控制器函数?

【问题讨论】:

  • 所有答案都是可靠的选择......(如果你还在学习,我不想增加混乱)但如果这是一件小事并且需要重复使用,你可以考虑使用helper。 (例如,如果您有多个视图都需要此值,并且您没有在母版页上使用它。关键是“重用”)asp.net/mvc/overview/older-versions-1/views/…... 再次查看您的用例是什么,并评估它从那里开始。例如:&lt;%= Helper.Copyright("Switchboard") %&gt;
  • 为什么不在视图中只显示@DateTime.Now.Year.ToString() - Switchboard - 你不需要ViewBag

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

您需要一个控制器方法来使用 ViewBag 并返回一个视图

public ActionResult Index()
{
    ViewBag.theDate = DateTime.Now.Year.ToString();
    return View();
}

Index.cshtml,只需使用

<p>&copy; @ViewBag.theDate - Switchboard</p>

【讨论】:

  • 如何从 Index() 以外的方法调用某些东西?
  • MVC 模式要求您使用控制器方法返回视图。在该方法中,您可以从其他服务调用其他方法。例如ViewBag.theDate = DateHelper.getYear()
【解决方案2】:

你也可以使用 ViewData,比如

ViewData["Year"] = DateTime.Now.Year.ToString(); // in controller/actionresult

在你看来(剃刀)只需写:

@ViewData["Year"]

【讨论】:

    【解决方案3】:

    您需要一个控制器ActionResult 来返回一个视图,如下所示:

    public ActionResult MyView()
    {
        //ViewBag.ShowTheYear = DateTime.Now.Year.ToString();
    
        //You do not call a method from the view.. you do it in the controller..
    
        // Using your example
    
        ViewBag.ShowTheYear = getYear();
    
        return View();
    }
    

    getYear方法:

    public String getYear()
    {
        return DateTime.Now.Year.ToString();
    }
    

    然后在你的 MyView.cshtml 中

    <p>&copy; @Html.Raw(ViewBag.ShowTheYear) - Switchboard</p>
    

    如果这有帮助,请告诉我!

    【讨论】:

    • 这确实有帮助。谢谢 BviLLe_Kid
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多