ASP.NET MVC:添加动态级联下拉列表

时间:2018-01-19 15:39:09

标签: asp.net-mvc cascadingdropdown dynamic-controls dropdownlistfor

我有2个下拉列表:团队和玩家 当我选择一个团队时,这些团队的玩家会显示在下拉列表中,#34;玩家"。 感谢javascript(谁在下拉列表中获得Team Id)和第二个下拉列表的部分视图。它工作得非常好。

接下来,我想动态添加此级联下拉列表的新行。 目前,我能够做到这一点,但我的问题是,在第二行,下拉列表"玩家" (DL 4)获得第一个下拉列表的值#34; Team" (DL1)而不是他的线下拉列表(DL3)。 如果我添加另一行,它也是一样的:在下拉列表中" Team"我是所有球队但是在下拉列表中#34;玩家"我在第一个下拉列表中选择了ID的值" Team"。

workflow

=============================================== =======

EDITION:

添加了2张图片以澄清我的问题=> DatabaseWorkflow

正如您在图像"工作流程"中看到的那样,面板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");

    }

我认为团队的问题并不是唯一的问题......它始终是TeamId(来自&#34; @ Html.DropDownListFor(m =&gt; m。 TeamId ,...&#34;

有人能解决我的问题吗? 如何添加动态级联下拉列表(有2级或3级)?

0 个答案:

没有答案