在没有viewbag的情况下获取模型数据

时间:2016-07-08 18:41:25

标签: c# angularjs asp.net-mvc

我是一名实习生,致力于改善网站的生活质量。没有什么必要的,但由于这实际上将被部署,我想保持整洁。

我需要从数据库中提取表格,并将其显示在网站的共享标题中。我已经设置了数据库,模型从数据库中获取数据,以及测试视图,看它是否正确显示。然而,该模型正由页面控制器通过viewbag传递,我被告知不要这样做。

那么,如何让我的页面打印出模型数据而不通过视图包呢?

3 个答案:

答案 0 :(得分:2)

您可以使用此格式

    public ActionResult Index(YourModelHere model)
    {
        return View(model);
    }

在您看来,添加此

@model yournamespacehere.Models.YourModelHere

更新

为部分视图数据创建新控制器

//partial view call
public ActionResult GetHeaderPartial()
{
   var model = new DataModel();
   model.data1 = "Menu 1";
   model.data2 = "Menu 2";

   return PartialView("_HeaderPartial", model);
}

为共享标头创建部分视图。在这个例子中,我将其命名为“_HeaderPartial”

@model yournamespace.Models.DataModel

<li><a href="#">@Model.data1</a></li>
<li><a href="#">@Model.data2</a></li>

在您的共享标题布局中,添加@ Html.Action(“GetHeaderPartial”,“ControllerHere”)

<header>
    <div class="content-wrapper">
        <div class="float-left">
            <p class="site-title">@Html.ActionLink("your logo here", "Index", "Home")</p>
        </div>
        <div class="float-right">
            <section id="login">
                @Html.Partial("_LoginPartial")
            </section>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                    <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                    @Html.Action("GetHeaderPartial","Sample")
            </nav>
        </div>
    </div>
</header>

答案 1 :(得分:0)

Here's一个好的起点。正如文章所述,基本上有三种方法可以将数据传递给视图:

  • ViewBag
  • 动态对象
  • 强类型对象

使用后一种方法(通常是一个好主意),您只需将模型实例传递给您正在返回的ActionResult(在您的情况下,这将是一个ViewResult实例)。

所以不要这样......

delay_while_idle

你这样做......

public ActionResult Index() 
{ 
   ViewBag.Foo= new Foo();
   return View();
}

确保您在索引视图中的模型具有以下行:

 public ActionResult Index() 
 {
    return View(new Foo());
 }

现在,您可以使用Razor或您正在使用的任何语法来执行您在视图中需要执行的操作。

答案 2 :(得分:0)

设置在控制器中创建并传递给视图的视图模型。这个link会对你有所帮助!