如何在视图内检索对象属性

时间:2019-04-11 10:10:36

标签: c# asp.net-mvc

我在控制器中有一个索引方法,如下所示:

    public ActionResult Index()
    {
        var object = _ObjectService.GetAll();
        return View(object);
    }

请给我列出具有这些属性的对象:

public class Object : EntityWithNameAndId
{
    public virtual Site Site { get; set; }
    public virtual List<User> Users { get; set; }
    public virtual List<Planning> Plannings { get; set; }
    public virtual Guid IdPilote { get; set; }
}

现在在我的Index()视图中,我想获取与IdPilote id相关的用户并显示其名称。

由于这个主题ASP.Net MVC: Calling a method from a view,我尝试了类似的方法:

@model List<MyClass.Models.Promotion>

@foreach (var item in Model)
{
    <td>@item.Site.Name</td>

   @{ 
       var id = item.IdPilote;

       //Here Interface and Service are folders
       var user = MyDAL.Interface.Service.IUserService.Get(id);
    }

    <td>
        //This is where i try to display my User name, 
        //that i get dynamically using the idPilote for each User in list
    </td>
}

但是Get(id)无法识别为有效方法。

public interface IUserService : IDisposable
{
    User Get(Guid id);
}

public class UserService : IUserService
{
    private MyContext context;

    public UserService(MyContext context)
    {
        this.context = context;
    }

    public User Get(Guid id)
    {
        return context.User.Where(w => w.Id == id).SingleOrDefault();
    }
}

那么,由于我仅获得一个ID,将User对象放入视图中的最佳方法是什么?

我应该在Index方法(可以调用IUserInterface.Get())中使用第一个列表创建一个新列表吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

按照建议通过创建新列表和特定的ViewModel使其起作用:

public class IndexObjectViewModel : EntityWithNameAndId
{
    public virtual Site Site { get; set; }
    public virtual List<User> Users { get; set; }
    public virtual List<Planning> Plannings { get; set; }

    //To store User instead of its Id
    public virtual User Pilote { get; set; }
}

现在的Index()看起来像这样:

public ActionResult Index()
{
    var objects = _IObjectService.GetAll();
    ViewBag.NotPromoExist = false;

    var indexObj = new List<IndexObjectViewModel>();           

    foreach (var p in objects)
    {
        var indexModel = new IndexObjectViewModel();

        indexModel.Id = p.Id;
        indexModel.Name = p.Name;
        indexModel.Site = p.Site;
        indexModel.Users = p.Users;
        indexModel.Plannings = p.Plannings;
        indexModel.Pilote = _IUserService.Get(p.IdPilote);

        indexObj.Add(indexModel);
    }

    return View(indexObj);
}

现在控制器中的所有操作都已完成。不确定这是否是最好的方法。