Обновите определенные поля, используя EF в asp.net MVC - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приложение, которое должно обновлять данные.Существует таблица под названием «HomePage» с несколькими полями.Для простоты использования я хочу, чтобы пользователь обновил только 2 поля в этой таблице (Description1 и Description2).Пытаясь добиться этого, он обновляет эти 2 поля, но остальные данные в других полях таблицы удаляются.Пожалуйста, проверьте ниже код

Controller.cs

 // GET: HomePages/Edit/5
        public ActionResult EditDescription(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            HomePage homePage = db.HomePages.Find(id);
            if (homePage == null)
            {
                return HttpNotFound();
            }
            return View(homePage);
        }

        // POST: HomePages/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult EditDescription([Bind(Include = "ID,Description1,Description2,TestName1,TestName2,TestName3,TestComp1,TestComp2,TestComp3,TestDesc1,TestDesc2,TestDesc3,FooterAddress,FooterEmail,FooterTel,FooterFax")] HomePage homePage)
        {
            if (ModelState.IsValid)
            {
                db.Entry(homePage).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(homePage);
        }

cshtml

@using (Html.BeginForm()) { @Html.AntiForgeryToken()

<div class="form-horizontal">

  <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.HiddenFor(model => model.ID)

  <div class="form-group">
    @Html.LabelFor(model => model.Description1, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
      @Html.TextAreaFor(model => model.Description1, 5, 100, null) @Html.ValidationMessageFor(model => model.Description1, "", new { @class = "text-danger" })
    </div>
  </div>

  <div class="form-group">
    @Html.LabelFor(model => model.Description2, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
      @Html.TextAreaFor(model => model.Description2 , 8, 100, null) @Html.ValidationMessageFor(model => model.Description2, "", new { @class = "text-danger" })
    </div>
  </div>



  <div class="form-group">
    <div class="col-md-offset-2 col-md-10">
      <input type="submit" value="Save" class="btn btn-default" style="color:white;background-color:#ad301c" />
    </div>
  </div>
</div>
}

Ответы [ 2 ]

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

Вы связываете всю модель и получаете только 2 элемента.

[Bind(Include = "ID,Description1,Description2,TestName1,TestName2,TestName3,TestComp1,TestComp2,TestComp3,TestDesc1,TestDesc2,TestDesc3,FooterAddress,FooterEmail,FooterTel,FooterFax")]

Поэтому попробуйте сделать это без опции Bind.

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

Вам следует использовать помощник по тегам @ Html.HiddenFor для полей, которые вы не хотите редактировать.Таким образом, представление отправит данные поля обратно в метод POST вашего контроллера.Например: <input type="hidden" asp-for="TestName1" /> или @Html.HiddenFor(x => x.TestName1) передаст поле TestName1 методу post в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...