我在控制器中有一个索引方法,如下所示:
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())中使用第一个列表创建一个新列表吗?或者有更好的方法吗?
答案 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);
}
现在控制器中的所有操作都已完成。不确定这是否是最好的方法。