Search code examples
asp.net-mvcasp.net-coreasp.net-mvc-4

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


I have to table Employee Pc

I Create RelationShip M:M EmployeePc and Create ViewModel EmployePCVWModel

The problem when send data from View To Controller It's Not Come just Employee Come But Pc Not Come

This My code on View


@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>

This VWModel

enter image description here

This Controller When data Come

enter image description here

TBPc Come Null

Any Help Please

I want Data come to Controller


Solution

  • Since you are sending model from form, try use 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} })
    }
    }

    In your View

    <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>
    

    Add [FromForm] to bind the model.

    Your Controller

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

    Test

    enter image description here enter image description here