Как получить свойство объекта внутри представления - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть метод индекса в контроллере, который выглядит следующим образом:

    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; }
}

Теперь в моем индексе () я хочу получить пользователя, связанного с идентификатором IdPilote, и отобразить его имя.

Я пробовал что-то подобное, благодаря этой теме ASP.Net MVC: вызов метода из представления:

@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();
    }
}

Итак, каков наилучший способ получить объект User внутри моего представления,так как я получаю только идентификатор?

Должен ли я создать новый список, используя первый, в моем методе Index (где я могу вызвать IUserInterface.Get ()) или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 11 апреля 2019

Сделайте так, чтобы это работало, создав новый список и конкретную 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);
}

Все делается вконтроллер сейчас.Не уверен, что это лучший способ сделать это ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...