Как исправить не работающее обновление ActionResult в NET Core? - PullRequest
0 голосов
/ 26 мая 2019

Я изучаю .NET Core и использую код из этого руководства .Но мое обновление sql не работает.

Вот код представления индекса:

        public ActionResult Index(int? id)
    {
        ViewBag.Operation = id;
        ViewBag.Name = db.Chars.ToList();
        Chars Chars = db.Chars.Find(id);
        return View(Chars);
    }

Пока все работает, я вижу результаты из sql, а вот обновленная часть:

        public ActionResult Update(Chars Chars)
    {
        if (ModelState.IsValid)
        {
            db.Entry(Chars).State = EntityState.Modified;
            db.SaveChanges();
        }
        return RedirectToAction("Index", new { id = 0 });
    }

Вот index.cshtml часть:

   @using (Html.BeginForm()
{
    @foreach (var item in (IEnumerable<MVC__test_2.Chars>)ViewBag.Name)
    {
        <div class="form-group">
            <div class="col-md-10">
                @Html.EditorFor(modelItem => item.CharName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.HiddenFor(modelItem => item.CharID, new { id = item.CharID })
            </div>
        </div>
        @Html.ActionLink("Index", "Index", new { id = item.CharID }) 
<input type="submit" value="Update" name="Update"
       style=@((ViewBag.Operation != null && Convert.ToInt32(ViewBag.Operation) > 0)   ? "display:block" : "display:none") />
    }
}

1 Ответ

0 голосов
/ 27 мая 2019

Согласно предоставленному вами руководству, я сделал демо для тестирования, и оно хорошо обновило данные.Ниже приведен рабочий пример, к которому можно обратиться и внести изменения в соответствии с вашими потребностями.

Модель

public class Description
{
    public int Id { get; set; }
    public string Display { get; set; }
}

Контроллер

public IActionResult Index(int? id)
    {
        ViewBag.Operation = id;
        ViewBag.Name = _context.Description.ToList();
        Description description= _context.Description.Find(id);
        return View(description);
    }

public ActionResult Update(Description description)
    {
        if (ModelState.IsValid)
        {
            _context.Entry(description).State = EntityState.Modified;
            _context.SaveChanges();
        }
        return RedirectToAction("Index", new { id = 0 });
    }

Index.cshtml , вы должны скрыть идентификатор измененных данных в разделе модификации.

@model WebApplication1.Models.Description 

@using (Html.BeginForm("Update", "Home", FormMethod.Post))
{
    @foreach (var item in (IEnumerable<WebApplication1.Models.Description >)ViewBag.Name)
    {
        <div class="form-group">
           <div class="col-md-10">
               @Html.EditorFor(modelItem => item.Display, new { htmlAttributes = new { @class = "form-control" } })
               @Html.HiddenFor(modelItem => item.Id, new { id = item.Id })
           </div>
       </div> 
       @Html.ActionLink("Edit", "Index", new { id = item.Id })
   }

   // Create or Update data
   @Html.AntiForgeryToken()
   <div class="form-horizontal">
       @Html.ValidationSummary(true)
       <fieldset>
          <legend> <b>Entry Screen</b></legend>
          <div class="form-group">
             @Html.LabelFor(model => model.Display, new { @class = "control-label col-md-2" })
             @Html.HiddenFor(model => model.Id)
             <div class="col-md-10">
                @Html.EditorFor(model => model.Display)
                @Html.ValidationMessageFor(model => model.Display)
             </div>
          </div>

          <div class="form-group">
              <p>
                  <input type="submit" value="Create" name="Create"
                       style=@((ViewBag.Operation != null && Convert.ToInt32(ViewBag.Operation) > 0) ? "display:none" : "display:block") />
                  <input type="submit" value="Update" name="Update"
                       style=@((ViewBag.Operation != null && Convert.ToInt32(ViewBag.Operation) > 0) ? "display:block" : "display:none") />
              </p>
          </div>
       </fieldset>
   </div>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...