在视图ASP.NET MVC4中使用来自控制器的变量

时间:2013-06-17 12:40:59

标签: asp.net asp.net-mvc asp.net-mvc-4

我的项目中有一个模型

using System;

namespace Argussite.SupplierServices.ViewModels
{
  public class UsersPage
  {
    public Guid SupplierId { get; set; }
    public string SupplierFullName { get; set; }
    public bool ActionsAllowed { get; set; }
  }
}

我在控制器中使用我的模型并设置属性

public ActionResult Index(Guid id)
    {
        var supplierOfUser = Context.Suppliers.AsNoTracking()
            //.Include(e => e.Supplier)
            .FirstOrDefault(e => e.Id == id);

        string SupplierId = id.ToString();
        string SupplierFullName = supplierOfUser.FullName.ToString();
        bool ActionsAllowed = supplierOfUser.Active;

        return View();
    }

然后我需要在视图中使用它,但我不知道如何在视图中获取我的属性?

5 个答案:

答案 0 :(得分:2)

首先,您的控制器操作需要将该模型实例发送到视图,如下所示:

return View(supplierOfUser);

您需要在视图的顶部显示:

@model Argussite.SupplierServices.ViewModels.UsersPage

然后,您需要做的就是在视图中使用模型:

@Model.SupplierFullName

如果要在视图中使用其他属性,可以将它们放入动态ViewBag变量中,如下所示:

ViewBag.supplierOfUser = supplierOfUser.FullName.ToString();

然后在您的视图中,您可以像这样使用此值:

@ViewBag.supplierOfUser

答案 1 :(得分:1)

很难用精确的代码帮助你,因为我不知道你想在你的视图上做什么,这是你应该如何在你的视图中传递和使用你的模型的一般概念

<强>控制器

public ActionResult Index(Guid id)
{
    var supplierOfUser = Context.Suppliers.AsNoTracking()
        .FirstOrDefault(e => e.Id == id);

    var usersPage = new UsersPage
    {
        SupplierId = supplierOfUser.Id,
        SupplierFullName = supplierOfUser.FullName,
        ActionsAllowed = supplierOfUser.Active
    }

    return View(usersPage ); // <-- Send viewmodel to view
}

查看

// Declare model
@model Argussite.SupplierServices.ViewModels.UsersPage
...
//Use your model here at will
@Html.DisplayFor(modelItem => item.FullName)

...
@Html.EditorFor(model => model.FullName)
@Html.ValidationMessageFor(model => model.FullName)

答案 2 :(得分:1)

为了将控制器中的数据用于视图,您需要使用参数中的模型返回视图:

return View(supplierOfUser);

在您看来,您还需要定义模型:

@model YourModel

请注意,您无需将供应商信息设置为其他变量(仅需要supplierOfUser)。

答案 3 :(得分:1)

创建一个新的UsersPage并将已有的属性分配给其属性,然后将新创建的UsersPage传递给视图:

public ActionResult Index(Guid id)
    {
        var supplierOfUser = Context.Suppliers.AsNoTracking()
            //.Include(e => e.Supplier)
            .FirstOrDefault(e => e.Id == id);

        var usersPage = new UsersPage();
        usersPage.SupplierId = id.ToString();
        usersPage.SupplierFullName = supplierOfUser.FullName.ToString();
        usersPage.ActionsAllowed = supplierOfUser.Active;

        return View(usersPage);
    }

答案 4 :(得分:1)

最好的方法是在视图中建立强类型模型:

@model Argussite.SupplierServices.ViewModels.UsersPage

然后,只需引用模型上的属性,例如

@Html.EditorFor(model => model.SupplierFullName)