Я думаю, что нашел ошибку в ядре. net .. но я не уверен. Существует сценарий, в котором я хочу обновить выбранное значение в списке выбора на основе значения, которое пользователь выбирает для ДРУГОГО списка выбора.
public async Task<IActionResult> Test(MusicModelView music)
{
if(music.GenreId == 2)
{
music.ArtistId = 4;
}
ViewData["Artists"] = new SelectList(GetArtists(), "Id", "Name", music.ArtistId);
ViewData["Genres"] = new SelectList(GetGenres(), "Id", "Name", music.GenreId);
return View(music);
}
private IEnumerable<Artist> GetArtists()
{
IList<Artist> artists = new List<Artist>();
artists.Add(new Artist() { Id = 1, Name = "Bob" });
artists.Add(new Artist() { Id = 2, Name = "Tom" });
artists.Add(new Artist() { Id = 3, Name = "Mike" });
artists.Add(new Artist() { Id = 4, Name = "Welly" });
return artists;
}
private IEnumerable<Genre> GetGenres()
{
IList<Genre> genres = new List<Genre>();
genres.Add(new Genre() { Id = 1, Name = "Drama" });
genres.Add(new Genre() { Id = 2, Name = "Drum N Base" });
genres.Add(new Genre() { Id = 3, Name = "Rock" });
genres.Add(new Genre() { Id = 4, Name = "Pop" });
return genres;
}
Это образец кода для воспроизведения этой ошибки в В приведенном выше простом примере, когда пользователь выбирает «жанр» с идентификатором 2 (барабанная база n), он должен сменить исполнителя.
MusicViewModel
public class MusicModelView
{
[Key]
public int Id { get; set; }
public int GenreId { get; set; } = 3;
public int ArtistId { get; set; } = 3;
}
Модели исполнителя / жанра:
public class Artist
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
}
ПРОСМОТР:
@model MusicModelView
<h4>MusicModelView</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form asp-action="Test">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group">
<select asp-for="GenreId" asp-items="ViewBag.Genres" class="form-control">
</select>
</div>
<div class="form-group">
@Html.DropDownList("ArtistId", ViewBag.Artists as SelectList)
@Html.DropDownList("Artists2", ViewBag.Artists as SelectList)
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
</div>
</div>
Теперь я пробовал разными способами поэкспериментировать с этим, и, как вы можете видеть, я включил 2 поля выбора с одинаковым списком элементов, но с разными именами. ...
Один из них имеет то же имя, что и связанный int в модели (ArtistId), а другой просто называется «Artists2».
Если вы измените первый список выбора (ArtistId) оба списка обновятся нормально.
ОДНАКО, если вы измените жанр и разрешите методу контроллера обновлять выбранный элемент (например, только если жанр == 2
if(music.GenreId == 2)
{
music.ArtistId = 4;
}
Тогда единственный выберите поле это обновление s - это тот, который называется "Artists2", тогда как тот, который связан с моделью, сохраняет предыдущее значение ....
Кто-нибудь знает, как это можно настроить, чтобы оно правильно обновляло поле выбора для ( ArtistId) one?
Большое спасибо,
Phil.