обрабатывать значения списка множественного выбора в форме ядра asp.net, отправлять несколько записей - PullRequest
0 голосов
/ 01 мая 2018

В ASP.NET CORE 2.0 я создаю форму Ajax. Несколько сотрудников могут быть обновлены в этой форме. Имеется номер сотрудника и поле с несколькими вариантами выбора для выбора компенсации сотруднику.
Проблема заключается в том, как обрабатывать значения возмещения, поскольку в списке можно выбрать несколько элементов. Форма будет представлена ​​как пара ключ-значение. В случае возмещения ключом является Возмещение, и значения будут кратны. Следовательно, как можно проверить, какое возмещение было выбрано для какого EmployeeID?

    @model myweb.NewWOModel

    <form id="frmWODetail" asp-action="EditMultipleEmployee" asp- controller="WOData" data-ajax="true" data-ajax-method="POST" data-ajax-success="onSuccess" data-ajax-failure="onFailed">
        @Html.AntiForgeryToken()
          <div class="row">
            <div class="col-sm-12">
            @foreach (var record in Model.MultipleEmployeeModels)
            {
                       <div class="row">
                        <div class="col-sm-6">
                            <label>WorkOrder No.:</label>
                            <span>
                                @record.EmployeeNo
                            </span>
                        </div>
                        <div class="col-sm-6">
                            <input type="hidden" name="EmployeeID" value="@record.EmployeeID" />
                        </div>
                    </div>

                    <div class="row col-sm-12">
          <select name="Reimbursement" asp-for="@record.ReimbursementID" asp-items="@(new SelectList(Model.ReimbursementModels,"ReimbursementID","ReimbursementName"))" multiple></select>
                    </div>


        <div class="row">
           <div class="col-sm-12 text-right">
             <input type="submit" class="btn btn-success" value="Save"/>          
    <input type="button" class="btn btn-primary" value="Close" data- dismiss="modal" />
            </div>
        </div>
</form>


<script type="text/javascript">
    var onComplete = function () {

    };

    var onSuccess = function (context) {

    };

    var onFailed = function (context) {

    };

</script>

Контроллер

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<JsonResult> EditMultipleEmployee(EmployeeModel empModel)
{
    //CODE HERE HOW TO HANDLE LIST BOX VALUES FOR EACH EMP       
}

Модель

public class EmployeeModel 
{
    public string[] Reimbursement{get;set;}
    public string[] EmployeeID{get;set;}
}




 public class NewWOModel
    {
       public List<MultipleEmployeeModels> MultipleEmployeeModels{get; set;}
       public List<ReimbursementModel> ReimbursementModels{ get; set; }
    }

    public class MultipleEmployeeModels
    {
      public string EmployeeNo{get;set;}
      public int EmployeeID{get;set;}
    }

    public class ReimbursementModel
    {
       public int ReimbursementID{get;set;}
       public string ReimbursementName{get;set;}
    }

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку у вас есть отношения между Сотрудником и Возмещением, вам необходимо изменить модель (ы), чтобы отразить эти отношения (все, что у вас есть, - это 2 независимые коллекции). Вам нужны следующие модели просмотра

public class EmployeeVM
{
    public int EmployeeID { get; set; }
    .... // other properties of Employee that you want in the view
    public int[] SelectedReimbursements { get; set; } // the selected reimbursements for an employee
}
public class EmployeeCollectionVM
{
    public List<EmployeeVM> Employees { get; set; }
    public IEnumerable<ReimbursementModel> ReimbursementOptions { get; set; }
}

и в методе GET вы передаете и экземпляр EmployeeCollectionVM представлению, которое будет

@model EmployeeCollectionVM
<form id="frmWODetail" asp-action="EditMultipleEmployee" ....... >
    ....
    @for(int i = 0; i < Model.Employees.Count; i++)
    {
        <input type="hidden" asp-for="Employees[i].EmployeeID />
        <select asp-for="Employees[i].SelectedReimbursements" asp-items="@(new SelectList(Model.ReimbursementOptions,"ReimbursementID","ReimbursementName"))" multiple></select>
    ....
</form>

, который отправит обратно на

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<JsonResult> EditMultipleEmployee(EmployeeCollectionVM model)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...