ASP.NET MVC: добавить динамически каскадный выпадающий список
У меня есть 2 выпадающих списка: Команды и игроки. Когда я выбираю команду, игроки для этой команды отображаются в выпадающем списке "Игроки". Я делаю это благодаря javascript (который получает Team Id в выпадающем списке) и частичному представлению для второго выпадающего списка. Это работает очень хорошо.
Далее я хочу динамически добавить новую строку этого каскадного выпадающего списка. В настоящее время я могу это сделать, но моя проблема в том, что во второй строке выпадающий список "Игроки" (DL 4) получает значение первого выпадающего списка "Команда" (DL1), а не из выпадающего списка его линии (DL3).). И то же самое, если я добавлю еще одну строчку: в выпадающем списке "Команда" у меня есть все команды, но в выпадающем списке "Игроки" у меня есть значения из выбранного Id в первом выпадающем списке "Команда".
================================================== ====
ИЗДАНИЕ:
2 изображения добавлены, чтобы прояснить мою проблему => База данных и рабочий процесс
Как вы можете видеть на изображении "Рабочий процесс", список игроков, отображаемых на панели 9 для новой строки, неверен. Список игроков относится к первой выбранной команде, а не (как должно быть) ко второй выбранной команде.
================================================== ====
Мой код:
Ввиду:
<form method="post">
<a style="margin: 10px 0;" href="javascript:addRow();">Add Row</a>
<table id="formTable">
<thead>
<tr>
<th>Team</th>
<th>Player</th>
</tr>
</thead>
<tbody>
<tr>
<td>
@if (ViewBag.TeamList != null)
{
@Html.DropDownListFor(m => m.TeamId, ViewBag.TeamList as SelectList, "-- Select Team--", new { @class = "form-control" })
}
</td>
<td>
@Html.DropDownListFor(m => m.PlayerId, new SelectList(""), "--Select Player--", new { @class = "form-control" })
</td>
</tr>
</tbody>
</table>
</form>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Styles.Render("~/Content/css")
@Styles.Render("~/Script/js")
<!-- Cascading dropdownlist-->
<script>
$(document).ready(function () {
$("#TeamId").change(function () {
var teamId = $(this).val();
debugger
$.ajax({
type: "Post",
url: "/OCs/GetPlayerList?TeamId=" + teamId,
contentType:"html",
success: function (response) {
debugger
$("#PlayerId").empty();
$("#PlayerId").append(response);
}
})
})
})
</script>
<!-- Add new row-->
<script type="text/javascript">// <![CDATA[
function addRow() {
//copy the table row and clear the value of the input, then append the row to the end of the table
$("#formTable tbody tr:first").clone().find("select").each(function () {
$(this).val('');
}).end().appendTo("#formTable");
}
// ]]></script>
Частичный вид:
<option value="">--Select Player--</option>
@if (ViewBag.PlayerOptions != null)
{
foreach (var item in ViewBag.PlayerOptions) {
<option value="@item.Value">@item.Text </option>
}
}
В контроллере:
public ActionResult Create()
{
ViewBag.TeamList = new SelectList(GetTeamList(), "IdTeam", "NameTeam");
....
return View(stuModel);
}
public List<Team> GetTeamList()
{
MyDbEntities db = new MyDbEntities();
List<Team> teamList = db.Teams.ToList();
return teamList
}
public ActionResult GetPlayerList(int TeamId)
{
MyDbEntities db = new MyDbEntities();
List<Playert> playerList = db.Players.Where(x => x.IdRefTeam == TeamId).ToList();
ViewBag.PlayerOptions = new SelectListplayerList "IdPlayer", "PlayerNom");
return PartialView("PlayerOptionsPartial");
}
Я думаю, что есть проблема с идентификатором Team, который не является уникальным... Это всегда TeamId (происходит от "@ Html.DropDownListFor (m => m.TeamId,...")
У кого-нибудь есть решение моей проблемы? Как добавить динамически каскадный выпадающий список (с 2 или 3 уровнями)?