ASP.NET - Попытка сохранить базу данных с вошедшим в систему пользователем, вместо выпадающего списка всех пользователей в скаффолде «Создать». - PullRequest
0 голосов
/ 10 марта 2019

У меня есть, надеюсь, простой вопрос, где у меня есть база данных, которая соединяет пользователей с тренировками, таблица пользователей и функциональность на сайте работают правильно, но когда я создаю таблицу UserWorkout и проверяю созданную на скаффолде страницу «Создать», чтобы начать новую тренировку , это дает мне выпадающий список всех пользователей, где я просто хочу, чтобы он автоматически выбирал пользователя, вошедшего на сайт по умолчанию. У меня проблемы с пониманием кода контроллера, чтобы исправить это.

Мой контроллер Create по умолчанию выглядит следующим образом:

// GET: UserCurrWorkouts/Create
public ActionResult Create()
{
        ViewBag.UserId = new SelectList(db.Users, "UserId", "UserName");
        ViewBag.UserActiveWorkout = new SelectList(db.WorkoutExercises, "LinkId", "LinkId");
        return View();       
}

И я попытался изменить его на это, чтобы он выбрал вошедшего в систему пользователя (а затем я удалил выпадающий список из представления в представлении):

public ActionResult Create()
{            
        var currentUser = Thread.CurrentPrincipal.Identity.Name;
        ViewBag.UserId = db.Users.Where(x => x.UserName == currentUser).FirstOrDefault();
        ViewBag.UserActiveWorkout = new SelectList(db.WorkoutExercises, "LinkId", "WorkoutId");
        return View();
}

Но он просто выдал ошибку в строке кода db.SaveChanges();, так что в этот момент я просто теряюсь в том, как я должен взаимодействовать с контроллером.

EDIT: Вот мой код бритвы на странице Создать, которую я хочу удалить, и в которой есть выпадающий список всех пользователей:

            <div class="col-md-10">
            @* Eventually should not be able to select other users in the dropdown menu, but couldn't figure out how to implement this *@
            @Html.DropDownList("UserId", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
            </div>

1 Ответ

1 голос
/ 10 марта 2019

На основании вашего комментария я думаю, что это поможет.

Вам все еще нужно иметь UserId на своей странице бритвы, чтобы она передавалась контроллеру при отправке вашей формы.

Если вы не хотите, чтобы он отображался, вы можете использовать:

<input type="hidden" name="UserId" value="@ViewBag.UserId" />

и в вашем контроллере:

// You didn't state exactly what you're using but generally you get the
// User from HttpContext
var currentUser = HttpContext.User.Identity.Name;

var user = db.Users.Where(x => x.UserName == currentUser).FirstOrDefault();
ViewBag.UserId = user.Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...