.NET Core / MVC - Просмотр публикации нулевой модели обратно в контроллер - PullRequest
0 голосов
/ 19 сентября 2018

Я использую C # /. Net Core и MongoDB.Мое действие редактирования использует модель, которая содержит список строковых значений, а затем необходимо отредактировать каждое значение в этом списке.Однако когда я вызываю действие edit (submit), моя модель имеет значение null или возвращает пустой список.

Редактировать получить:

        [HttpGet]
        public IActionResult EditUser(string userId)
        {
           if (userId == null)
            return NotFound();

           var user = _mongoService.RecordLookup(userId);

           if (user == null)
            return NotFound();

           var viewModel = new EditRecordViewModel { Records = user };

           return View(viewModel);
        }

Редактировать сообщение:

    [HttpPost]
    public IActionResult EditUser(EditRecordViewModel model)
    {
        try
        {
            foreach (var rec in model.Records)
            {
                var id = rec.Id;
                var filter = Builders<RecordModel>.Filter.Eq("Id", id);

                var modified = rec.Modified_At;
                modified = DateTime.Now;
                var updater = Builders<RecordModel>.Update.Set("Modified_At", modified);

                var val = rec.Value;
                updater = updater.Set("Value", val);

                _mongoService.EditRecord(filter, updater);
            }              
        }

        catch(Exception ex)
        {
            throw ex;
        }

        return RedirectToAction("Index");
    }

Просмотр:

    @model EditRecordViewModel


    @using (Html.BeginForm("EditUser", "Grid", FormMethod.Post))
    {
       <div class="card">           
         <div class="card-body px-lg-5 pt-0 list-group-flush form-horizontal">    
            <div class="row list-group-item form-control">
                 @foreach (var rec in Model.Records)
                    {
                        @rec.ColumnName @Html.TextBoxFor(m => rec.Value, new { @class = "form-control" })
                    }
            </div>
      </div>
      <div class="row list-group-item form-control">
          <div class="col-md-12">
              <input type="submit" class="btn btn-outline-success btn-rounded" 
               value="Save Edits" />
              @Html.ActionLink("Cancel", "Index", "Grid", null, new { @class="btn btn-outline-black btn-rounded" })
        </div>
    </div>
</div>
}

Просмотр модели:

   using System.Collections.Generic;

   namespace Medhub_API.Data.Models
   {
     public class EditRecordViewModel
     {
        public List<RecordModel> Records { get; set; }
     }
   }

Я мог бы упустить что-то фундаментальное или простое здесь, но любые предложения очень ценятся!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Проблема foreach.Используйте цикл for и индекс коллекции, чтобы получить значения для правильной отправки обратно в контроллер

Например

@model EditRecordViewModel


@using (Html.BeginForm("EditUser", "Grid", FormMethod.Post)) {
   <div class="card">           
     <div class="card-body px-lg-5 pt-0 list-group-flush form-horizontal">          
        <div class="row list-group-item form-control">
            @for(var i = 0; i < Model.Records.Count; i++) {
                @Model.Records[i].ColumnName @Html.TextBoxFor(m => m.Records[i].Value, new { @class = "form-control" })
            }
        </div>
    </div>
  </div>
  <div class="row list-group-item form-control">
      <div class="col-md-12">
          <input type="submit" class="btn btn-outline-success btn-rounded" 
           value="Save Edits" />
          @Html.ActionLink("Cancel", "Index", "Grid", null, new { @class="btn btn-outline-black btn-rounded" })
      </div>
  </div>
}
0 голосов
/ 19 сентября 2018

Заменить

@foreach (var rec in Model.Records)
{
    @rec.ColumnName @Html.TextBoxFor(m => rec.Value, new { @class = "form-control" })
}

на

@Html.EditorFor(model => model.Records)

Добавить новый файл RecordModel.cshtml в папку EditorTemplates и добавить следующий код

@model IEnumerable<RecordModel>
@foreach(var rec in Model)
{
   @rec.ColumnName @Html.TextBoxFor(m => rec.Value, new { @class = "form-control" })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...