Asp.net Core 我无法从表单发送多个数据

Asp.net Core I can't send Multiple data from form

提问人:ATA 提问时间:10/26/2023 最后编辑:mamad2559ATA 更新时间:10/31/2023 访问量:78

问:

我必须表员工电脑

我创建了 RelationShip M:M 并创建了 ViewModelEmployeePcEmployePCVWModel

从视图发送到控制器发送数据时出现的问题 不只是员工来了,而是PC不来了

查看此“我的代码”


@model ITProject.ViewModels.EmployePCVWModel

<br />
<br />

<div class="content-wrapper" style="min-height: 1203.31px;">

    <!-- Main content -->

    <section class="content">
        <div class="row">
            <div class="col-xs-6 col-sm-8 col-md-6 col-lg-12">

                <!-- /.card -->

                <div class="card border-secondary mb-3">
                    <div class="card-header">
                        <h5 class="page-title"> Assign PC \ Laptop</h5>
                    </div>

                    <form class="forms-sample" method="post" enctype="multipart/form-data"
                          asp-controller="EmployeePc" asp-action="Save" role="form">

                        <div class="row">

                            <div class="col-md-5 grid-margin stretch-card">

                                <div class="card-body">

                                    @* <input asp-for="ItemId" type="hidden" />
                                    <input asp-for="CreatedBy" type="hidden" />
                                    <input asp-for="CreatedDate" type="hidden" />
                                    <input asp-for="CurrentState" type="hidden" />
                                    <input asp-for="ImageName" type="hidden" />*@

                                    <div class="col-md-6 sm-3">

                                        <img src="@string.Format("/Uploads/Employee/{0}",Model.TBEmployee?.EmployeeImage)"
                                             class="w3-card-4" alt="Person"
                                             height="110" width="100"
                                             asp-append-version="true" />
                                        <br />

                                        <label>Number :</label>

                                        <input type="hidden" asp-for="TBEmployee!.EmployeeId" />    @* لحل مشكلة ان ال اي دي لا يساوى 0 عند التعديل*@

                                        <input type="text" readonly="readonly" asp-for="TBEmployee!.EmployeeNumber" class="form-control col-md-6 sm-3">
                                        <span class="label danger alert-danger" asp-validation-for="TBEmployee!.EmployeeNumber"></span>

                                    </div>
                                    <div class="row col-lg-8 md-7 sm-3">

                                        <label class="m-2">Name :</label>
                                        <input type="text" readonly="readonly" asp-for="TBEmployee!.EmployeeName" class="form-control">

                                        <span class="label danger alert-danger" asp-validation-for="TBEmployee!.EmployeeName"></span>

                                    </div>


                                </div>

                            </div>

                            @* ////////////////LapTop////////////////*@

                            <div class="col-md-7">
                                <div class="card-body">
                                    <h4 class="card-title">Device Specification</h4>
                                    <br /><br />
                                    <div class="row">
                                        <div>
                                            <table class="table table-bordered table-striped dataTable dtr-inline"
                                                   style="overflow-y:scroll" role="grid">
                                                <thead>
                                                    <tr role="row">
                                                        <th class="sorting_asc text-center">Pc ID</th>
                                                        <th class="sorting_asc text-center">Pc Model</th>
                                                        <th class="sorting text-center">Serial \ Mac address</th>
                                                        <th class="sorting text-center">Actions</th>
                                                </thead>

                                                <tbody>
                                                    @foreach (var pc in Model.TBPc)
                                                    {
                                                        <tr>
                                                            @*<input type="hidden" asp-for="@pc.Id" />*@
                                                            <td class="text-center">@pc.PcId</td>
                                                            <td class="text-center">@pc.PcName</td>
                                                            <td class="text-center">@pc.PcSerial</td>

                                                            <td class="text-center">
                                                                @*  <a  asp-action="Save" asp-route-id="@pc.PcId" class="btn btn-outline-success bi bi-plus"></a>
                                                            *@

                                                                <input class="form-check-input" id="@pc.PcId" type="checkbox" value="@pc.PcId">
                                                            </td>
                                                        </tr>
                                                    }
                                                </tbody>

                                            </table>
                                        </div>
                                        <br />
                                        <button style='margin-right:86px; width:150px;' type="submit" class="btn btn-outline-success">@ViewBag.ButtonName</button>

                                        <a asp-controller="EmployeePc" asp-action="List" style="width:100px;" class="btn btn-outline-danger"> Back </a>

                                    </div>

                                </div>

                            </div>
                        </div>
                    </form>

                </div>
            </div>
        </div>
    </section>

</div>

这辆大众汽车

enter image description here

此控制器 当数据来时

enter image description here

TBPc 归 null

请提供任何帮助

我希望数据进入控制器

-核心 asp.net-mvc-4

评论

3赞 Mark Seemann 10/27/2023
请不要上传代码/数据/错误的图像。

答:

1赞 Ronaldoz 10/27/2023 #1

由于您是从窗体发送模型,因此请尝试使用 HtmlHelper

@using (Html.BeginForm(“Save”, “EmployeePc”, FormMethod.Post)) { for (var i = 0; i < @Model.PC.Count; i++) { @Html.HiddenFor(m => m.PC[i].PCName) @Html.DisplayName(@Model.PC[i].PCName)
@Html.TextBoxFor(m => m.PC[i].PCId, new { htmlAttributes = new { @type = “number”, @min = 0} })

}
}

在您的视图中

<section class="content">
    <div class="row">
        <div class="col-xs-6 col-sm-8 col-md-6 col-lg-12">

            <!-- /.card -->

            <div class="card border-secondary mb-3">
                <div class="card-header">
                    <h5 class="page-title"> Assign PC \ Laptop</h5>
                </div>

                <form class="forms-sample" method="post" enctype="multipart/form-data"
                      asp-controller="EmployeePc" asp-action="Save" role="form">

                    <div class="row">

                        <div class="col-md-5 grid-margin stretch-card">

                            <div class="card-body">

                                @* <input asp-for="ItemId" type="hidden" />
                                <input asp-for="CreatedBy" type="hidden" />
                                <input asp-for="CreatedDate" type="hidden" />
                                <input asp-for="CurrentState" type="hidden" />
                                <input asp-for="ImageName" type="hidden" />*@

                                <div class="col-md-6 sm-3">

                                    <img src="@string.Format("/Uploads/Employee/{0}",Model.TBEmployee?.EmployeeImage)"
                                         class="w3-card-4" alt="Person"
                                         height="110" width="100"
                                         asp-append-version="true" />
                                    <br />

                                    <label>Number :</label>

                                    <input type="hidden" asp-for="TBEmployee!.EmployeeId" />    @* لحل مشكلة ان ال اي دي لا يساوى 0 عند التعديل*@

                                    <input type="text" readonly="readonly" asp-for="TBEmployee!.EmployeeNumber" class="form-control col-md-6 sm-3">
                                    <span class="label danger alert-danger" asp-validation-for="TBEmployee!.EmployeeNumber"></span>

                                </div>
                                <div class="row col-lg-8 md-7 sm-3">

                                    <label class="m-2">Name :</label>
                                    <input type="text" readonly="readonly" asp-for="TBEmployee!.EmployeeName" class="form-control">

                                    <span class="label danger alert-danger" asp-validation-for="TBEmployee!.EmployeeName"></span>

                                </div>


                            </div>

                        </div>

                        @* ////////////////LapTop////////////////*@

                        <div class="col-md-7">
                            <div class="card-body">
                                <h4 class="card-title">Device Specification</h4>
                                <br /><br />
                                <div class="row">
                                    <div>
                                        <table class="table table-bordered table-striped dataTable dtr-inline"
                                               style="overflow-y:scroll" role="grid">
                                            <thead>
                                                <tr role="row">
                                                    <th class="sorting_asc text-center">Pc ID</th>
                                                    <th class="sorting_asc text-center">Pc Model</th>
                                                    <th class="sorting text-center">Serial \ Mac address</th>
                                                    <th class="sorting text-center">Actions</th>
                                            </thead>

                                               //Replace your foreach with using HtmlHelper
                                           <tbody>
        <tr>
            
            <td class="text-center">@Model.PCId</td>
            <td class="text-center">@Model.PCName</td>

            <td class="text-center">
                @using (Html.BeginForm("Save", "EmployeePc", FormMethod.Post))
                {
                    for (var i = 0; i < @Model. TBPc.Count; i++)
                    {
                        @Html.HiddenFor(m => m. TBPc [i].PCName)
                        @Html.DisplayName(@Model. TBPc [i].PCName) <br />
                        @Html.TextBoxFor(m => m. TBPc [i].PCId, new { htmlAttributes = new { @type = "number", @min = 0} })
                        <br />
                    }
                    <br />
                    <input class="btn btn-primary" type="submit" value="Submit" />
                }

                @*<a asp-action="Save" asp-route-id="@pc.PCId" class="btn btn-outline-success bi bi-plus"></a>*@

                <input class="form-check-input" id="@Model.PCId" type="checkbox" value="@ Model.PCId" name="@ Model.PCId">
            </td>
        </tr>
</tbody>
                                        </table>
                                    </div>
                                    <br />
                                    <button style='margin-right:86px; width:150px;' type="submit" class="btn btn-outline-success">@ViewBag.ButtonName</button>

                                    <a asp-controller="EmployeePc" asp-action="List" style="width:100px;" class="btn btn-outline-danger"> Back </a>

                                </div>

                            </div>

                        </div>
                    </div>
                </form>

            </div>
        </div>
    </div>
</section>

添加 [FromForm] 以绑定模型。

您的控制器

//[ValidateAntiForgeryToken]
[HttpPost]
public IActionResult Save([FromForm]EmployeePCVWModel employeePC)
{
    if(ModelState.IsValid)
    {
        //
    }
    //
    return View(employeePC);
}

测试

enter image description here enter image description here