#c# #asp.net-mvc #asp.net-core
Вопрос:
У меня есть модель списка, которая передается в мое представление. Но я хочу разделить Participant
» ы » внутри списка в зависимости от того, кто User
вошел в систему в ViewBag.
как я сохраняю вошедшего в систему пользователя в ViewBag с контроллера:
HttpContext.Session.SetInt32("UserId", dbUser.UserId);
ViewBag.UserId = HttpContext.Session.GetInt32("UserId");
текущий код представления:
@model List<League>
@{
if (Model != null amp;amp; Model.Any())
{
foreach(League i in Model)
{
foreach (MMLeagueParticipant mmLeagueParticipant in i.allParticipants)
{
<p>@mmLeagueParticipant.child.ParticipantFirstName @mmLeagueParticipant.child.ParticipantLastName</p>
}
}
}
else
{
<p>the list is empty</p>
}
}
мой код в настоящее время работает, но он отображает все Participant
» ы » независимо от того, принадлежат ли они текущему входу в User
систему или нет.
Решение, которое, я думал, может сработать:
<p>Your kids:</p>
foreach(League i in Model)
{
foreach (MMLeagueParticipant mmLeagueParticipant in i.allParticipants)
{
if(mmLeagueParticipant.child.Parent.UserId == ViewBag.UserId )
{
<p>@mmLeagueParticipant.child.ParticipantFirstName @mmLeagueParticipant.child.ParticipantLastName</p>
}
}
}
<p>All other kids:</p>
foreach(League i in Model)
{
foreach (MMLeagueParticipant mmLeagueParticipant in i.allParticipants)
{
if(mmLeagueParticipant.child.Parent.UserId != ViewBag.UserId )
{
<p>@mmLeagueParticipant.child.ParticipantFirstName @mmLeagueParticipant.child.ParticipantLastName</p>
}
}
}
Ошибка, которую я получаю, пытаясь это сделать:
NullReferenceException: Object reference not set to an instance of an object.
ему не нравится if(mmLeagueParticipant.child.Parent.UserId == ViewBag.UserId)
линия.
Модели отношений:
league
Модель иViewModel
(Participant
) разделяютMMLeagueParticipant
среднюю таблицу для отношений «многие ко многим» (Participant
можно играть во многиеLeague
, а у многихLeague
может быть многоParticipant
).- The
User
model has a one-to-many relationships with theViewModel
. (one Logged inUser
can have manyParticipant
‘s)
Моя модель лиги:
int LeagueId { get; set; }
string sport { get; set; }
string gender { get; set; }
string ageRange { get; set; }
List<MMLeagueParticipant> allParticipants { get; set; }
Моя модель ViewModel:
public List<Participant> allParticipants { get; set; }
public ViewModel.Participant participant { get; set; }
public class Participant
{
int ParticipantId { get; set; }
string ParticipantFirstName { get; set; }
string ParticipantLastName { get; set; }
string ParticipantGender { get; set; }
System.DateTime ParticipantDOB { get; set; }
List<MMLeagueParticipant> allLeagues { get; set; }
int UserId { get; set; }
User Parent { get; set; }
}
Моя средняя таблица MMLeagueParticipant для модели лиги и модели просмотра.Участник:
int MMLeaugeParticipantId { get; set; }
int ParticipantId { get; set; }
int LeaugeId { get; set; }
leauge sport { get; set; }
ViewModel.Participant child { get; set; }
Моя модель пользователя:
int UserId { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
string Email { get; set; }
string Password { get; set; }
strig ConfirmPassword { get; set; }
List<ViewModel.Participant> kids { get; set; }
Ответ №1:
Вы можете просто отфильтровать своих участников с помощью
var userParticipants = allParticipants.Where(p => p.UserId == Viewbag.UserId).ToList()
Это требует, чтобы вы использовали Систему.Пространство имен Linq.
Изменить: Вот более конкретный пример
foreach(League i in Model)
{
var userParticipants = i.allParticipants.Where(p => p.UserId == Viewbag.UserId).ToList();
foreach (MMLeagueParticipant mmLeagueParticipant in userParticipants)
{
<p>@mmLeagueParticipant.child.ParticipantFirstName @mmLeagueParticipant.child.ParticipantLastName</p>
}
}
Комментарии:
1. не могли бы вы привести мне пример? я не совсем уверен, как это сделать. Я довольно новичок в c# и mvc в целом
2. Конечно. Отредактировал ответ.
3. мне пришлось переодеться
.Where(p => p.UserId
, чтобы.Where(p => p.child.Parent.UserId
. кроме того, это работает по мере необходимости