Asp.net mvc ASP.NET Core-将填充模型发回

Asp.net mvc ASP.NET Core-将填充模型发回,asp.net-mvc,asp.net-core,Asp.net Mvc,Asp.net Core,我正在开发一个web应用程序,它基本上允许您在体育联盟内管理陪审团职责。其中一个页面用于将人员分配到预定义面板中的多个预定义“职责”。该页面显示可用面板的侧面(一行3个)。然后,可以选择要修改的配电盘 从技术上讲,在页面中,我为每个可用面板加载一个局部视图。选择要编辑的面板时,将重新加载页面,并在可编辑的局部视图中重新加载所选面板 edit.cshtml @model Models.Database.Models.PanelOverviewModel; @{ ViewBag.Title

我正在开发一个web应用程序,它基本上允许您在体育联盟内管理陪审团职责。其中一个页面用于将人员分配到预定义面板中的多个预定义“职责”。该页面显示可用面板的侧面(一行3个)。然后,可以选择要修改的配电盘

从技术上讲,在页面中,我为每个可用面板加载一个局部视图。选择要编辑的面板时,将重新加载页面,并在可编辑的局部视图中重新加载所选面板

edit.cshtml

@model Models.Database.Models.PanelOverviewModel;

@{
    ViewBag.Title = "Samenstelling van de panels";
    Layout = "_Layout";
}

<h2>Samenstelling van de panels.</h2>

<div class="container-fluid  mb-3">
    <div class="container bg-light">
        @if (Model.PanelMatrix != null && Model.PanelMatrix.Count > 0)
        {
            @for (var index = 0; index < Model.PanelMatrix.Keys.Count; index++)
            {
                <div class="line"></div>

                @if (Model.PanelMatrix.ContainsKey(index))
                {
                    var panelNames = Model.PanelMatrix[index];

                    <div class="row mb-3">
                        @foreach (var panel in panelNames)
                        {
                            var currentPanel = Model.PanelComposition[panel];

                            @if (currentPanel.PanelName == Model.SelectedPanel)
                            {
                                <div class="col">
                                    @await Html.PartialAsync("JuryOpstelling/_EditPanelView", currentPanel)
                                </div>
                            }
                            else
                            {
                                <div class="col">
                                    @await Html.PartialAsync("JuryOpstelling/_ShowPanelView", currentPanel)
                                </div>
                            }
                        }

                    </div>
                }

                <div class="line"></div>
            }
        }
        else
        {
            <div class="line"></div>
            <p>Geen panels gevonden.</p>
            <div class="line"></div>
        }
    </div>
</div>
@model Models.Database.Models.PanelModel

<div class="border-right">
    <form asp-action="SavePanel" method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" id="currentPanel" name="currentPanel" asp-for="@Model.PanelName" />
        <input type="hidden" id="wedstrijdSessie" name="wedstrijdSessie" asp-for="@Model.WedstrijdSessie" />
        <input type="hidden" id="currentMembers" name="currentMembers" asp-for="@Model.PanelComposition" />

        <div class="form-group">
            <div class="row">
                <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                    <input type="submit" value="Edit" class="btn btn-outline-info"/>
                </div>
                <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                    <input type="button" value="Overview" class="btn btn-outline-info" onclick= "location.href = '@Url.Action("Index", "JuryOpsteller", new { id = Model.WedstrijdSessie })'"/>
                </div>
            </div>
        </div>

        <h3>@Model.PanelName</h3>

        <div class="container-fluid mb-3">
            <div class="container bg-light">
                @foreach (var panel in Model.PanelComposition)
                {
                    <hr style="border-style: dotted;"/>

                    <div class="row formgroup align-items-center">
                        <div class="col-4">
                            <label class="control-label"><p class="font-weight-bold">@panel.Functie:</p></label>
                        </div>
                        <div class="col-8">
                            <select asp-for="@panel.FK_Jury"
                                    asp-items="Model.JuryMembers"
                                    class="form-control text-center d-flex align-items-center justify-content-center"
                                    id ="currentSelectedJuryMemmber"
                                    name="currentSelectedJuryMemmber" 
                                    value="@panel.JuryName"></select>
                            <span asp-validation-for="@panel.JuryName" class="text-danger"></span>
                        </div>
                    </div>
                }
            </div>
        </div>
    </form>
</div>
@model Models.Database.Models.PanelOverviewModel;
@{
ViewBag.Title=“Samenstelling van de panels”;
布局=“_布局”;
}
萨门斯·范德小组。
@如果(Model.PanelMatrix!=null&&Model.PanelMatrix.Count>0)
{
@对于(var index=0;index
}
\u EditPanelView.cshtml

@model Models.Database.Models.PanelOverviewModel;

@{
    ViewBag.Title = "Samenstelling van de panels";
    Layout = "_Layout";
}

<h2>Samenstelling van de panels.</h2>

<div class="container-fluid  mb-3">
    <div class="container bg-light">
        @if (Model.PanelMatrix != null && Model.PanelMatrix.Count > 0)
        {
            @for (var index = 0; index < Model.PanelMatrix.Keys.Count; index++)
            {
                <div class="line"></div>

                @if (Model.PanelMatrix.ContainsKey(index))
                {
                    var panelNames = Model.PanelMatrix[index];

                    <div class="row mb-3">
                        @foreach (var panel in panelNames)
                        {
                            var currentPanel = Model.PanelComposition[panel];

                            @if (currentPanel.PanelName == Model.SelectedPanel)
                            {
                                <div class="col">
                                    @await Html.PartialAsync("JuryOpstelling/_EditPanelView", currentPanel)
                                </div>
                            }
                            else
                            {
                                <div class="col">
                                    @await Html.PartialAsync("JuryOpstelling/_ShowPanelView", currentPanel)
                                </div>
                            }
                        }

                    </div>
                }

                <div class="line"></div>
            }
        }
        else
        {
            <div class="line"></div>
            <p>Geen panels gevonden.</p>
            <div class="line"></div>
        }
    </div>
</div>
@model Models.Database.Models.PanelModel

<div class="border-right">
    <form asp-action="SavePanel" method="post">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" id="currentPanel" name="currentPanel" asp-for="@Model.PanelName" />
        <input type="hidden" id="wedstrijdSessie" name="wedstrijdSessie" asp-for="@Model.WedstrijdSessie" />
        <input type="hidden" id="currentMembers" name="currentMembers" asp-for="@Model.PanelComposition" />

        <div class="form-group">
            <div class="row">
                <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                    <input type="submit" value="Edit" class="btn btn-outline-info"/>
                </div>
                <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                    <input type="button" value="Overview" class="btn btn-outline-info" onclick= "location.href = '@Url.Action("Index", "JuryOpsteller", new { id = Model.WedstrijdSessie })'"/>
                </div>
            </div>
        </div>

        <h3>@Model.PanelName</h3>

        <div class="container-fluid mb-3">
            <div class="container bg-light">
                @foreach (var panel in Model.PanelComposition)
                {
                    <hr style="border-style: dotted;"/>

                    <div class="row formgroup align-items-center">
                        <div class="col-4">
                            <label class="control-label"><p class="font-weight-bold">@panel.Functie:</p></label>
                        </div>
                        <div class="col-8">
                            <select asp-for="@panel.FK_Jury"
                                    asp-items="Model.JuryMembers"
                                    class="form-control text-center d-flex align-items-center justify-content-center"
                                    id ="currentSelectedJuryMemmber"
                                    name="currentSelectedJuryMemmber" 
                                    value="@panel.JuryName"></select>
                            <span asp-validation-for="@panel.JuryName" class="text-danger"></span>
                        </div>
                    </div>
                }
            </div>
        </div>
    </form>
</div>
@model.Database.Models.PanelModel
@Model.PanelName
@foreach(Model.PanelComposition中的var面板)
{

@panel.Functie:

}
\u EditPanelView.cshtml为每个职责显示一个组合框,其中包含可用陪审团成员的列表。最后,我们可以单击“编辑”,然后更改列表。但是无论我做什么,PanelComposition属性总是返回为null,而它应该包含Jurymember数据。我该如何解决这个问题

编辑

根据我得到的答案,我重新编写了\u EditPanelView.cshtml中的代码,如下所示:

<form asp-action="SavePanel" method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" id="currentPanel" name="currentPanel" asp-for="@Model.PanelName" />
    <input type="hidden" id="wedstrijdSessie" name="wedstrijdSessie" asp-for="@Model.WedstrijdSessie" />

    <div class="form-group">
        <div class="row">
            <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                <input type="submit" value="Aanpassen" class="btn btn-outline-info" />
            </div>
            <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                <input type="button" value="Terug naar het overzicht" class="btn btn-outline-info" onclick="location.href = '@Url.Action("Index", "JuryOpsteller", new { id = Model.WedstrijdSessie })'" />
            </div>
        </div>
    </div>

    <h3>@Model.PanelName</h3>

    <div class="container-fluid mb-3">
        <div class="container bg-light">
            @for (var i = 0; i < Model.PanelComposition.Count; i++)
            {
                <hr style="border-style: dotted;" />

                <div class="row formgroup align-items-center">
                    <div class="col-4">
                        <label class="control-label"><p class="font-weight-bold">@Model.PanelComposition[i].Functie:</p></label>
                    </div>
                    <div class="col-8">
                        <select asp-items="@Model.JuryMembers"
                                class="form-control text-center d-flex align-items-center justify-content-center"
                                name="@Model.PanelComposition[i].JuryName"
                                value="@Model.PanelComposition[i].FK_Jury">
                        </select>
                        <span asp-validation-for="@Model.PanelComposition[i].JuryName" class="text-danger"></span>
                    </div>
                </div>
            }
        </div>
    </div>
</form>

@Model.PanelName
@对于(var i=0;i

@Model.PanelComposition[i]。函数:

}
这解决了一个问题,正如海报所示,这允许映射模型,并允许HttpPost操作加载数据

但是,正如您在下面的屏幕截图中看到的,我仍然存在一些问题:

正如您所看到的,组合框都显示了相同的选项,第一个加载的记录,正如您在生成的HTML中所看到的:

看起来数据进入了HTML,但是标记仍然存在一些问题


这里有人有主意吗?我已将加载到所用模型中的数据添加为(万岁的NewtonSoft)。

根据此代码,
PanelComposition
是一个集合。在表单中,其名称应更改为集合类型

删除

更改\u EditPanelView.cshtml中的代码(foreach)

在标记
中,添加
name=“PanelComposition[@i].FK\u Jury”

(变量i=0;i
根据我收到的回复,我通过结合一些回复和一点逻辑思考,成功地让它工作起来

当前代码允许我正确生成组合框,并在帖子中读取更改的值:

<form asp-action="SavePanel" method="post">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" id="currentPanel" name="currentPanel" asp-for="@Model.PanelName" />
    <input type="hidden" id="wedstrijdSessie" name="wedstrijdSessie" asp-for="@Model.WedstrijdSessie" />

    <div class="form-group">
        <div class="row">
            <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                <input type="submit" value="Aanpassen" class="btn btn-outline-info" />
            </div>
            <div class="col-md-6 text-center d-flex align-items-center justify-content-center">
                <input type="button" value="Terug naar het overzicht" class="btn btn-outline-info" onclick="location.href = '@Url.Action("Index", "JuryOpsteller", new { id = Model.WedstrijdSessie })'" />
            </div>
        </div>
    </div>

    <h3>@Model.PanelName</h3>

    <div class="container-fluid mb-3">
        <div class="container bg-light">
            @for(var i = 0; i < Model.PanelComposition.Count; i++)
            {
                int juryCount = i;
                <hr style="border-style: dotted;" />

                <div class="row formgroup align-items-center">
                    <div class="col-4">
                        <label class="control-label"><p class="font-weight-bold">@Model.PanelComposition[i].Functie:</p></label>
                    </div>

                    <div class="col-8">
                        <select asp-for= "PanelComposition[juryCount].FK_Jury"
                                asp-items = "Model.JuryMembers"
                                class="form-control text-center d-flex align-items-center justify-content-center"
                                name="PanelComposition[@juryCount].FK_Jury"
                                value="@Model.PanelComposition[juryCount].FK_Jury.ToString()">
                        </select>
                        <span asp-validation-for="@Model.PanelComposition[i].JuryName" class="text-danger"></span>
                    </div>
                </div>
            }
        </div>
    </div>
</form>

有了这个,我可以继续,尽管我想知道一件事。正如你所看到的,我在post action中获得的数据只包含一个FK\u Jury的值。有没有办法也填充Functie的值?

你能显示模型
PanelOverviewModel
?公共类PanelOverviewModel吗{#region Properties public int WedstrijdSessione{get;set;}公共字典面板组合{get;set;}公共字典面板矩阵;公共字符串SelectedPanel{get;set;}#endregion}Thx,它可以工作!但是为什么它现在可以工作?也许这里的任何人都可以分享一些关于它的信息?因为集合的映射需要顺序值来映射。看起来我有点太快了。请参阅我的d
{
  "WedstrijdSessie": 5828,
  "PanelName": null,
  "ClubName": null,
  "PanelComposition": [
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 156,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 66,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 143,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 121,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 110,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 129,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 46,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 64,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 64,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 64,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    },
    {
      "FK_WedstrijdSessie": null,
      "SK_JuryOpgave": null,
      "FK_Jury": 88,
      "Omschrijving": null,
      "Functie": null,
      "Naam": null,
      "Voornaam": null,
      "JuryNiveau": null,
      "JuryNiveauNr": null,
      "SK_Club": null,
      "Club": null,
      "Vlg_PositieToegekend": null,
      "JuryName": " "
    }
  ],
  "JuryMembers": null
}