Несколько форм на одной странице просмотра

Я работаю над приложением, которое обрабатывает профиль сотрудника.

У меня есть 3 формы (все в одном контроллере) на одной странице просмотра, но она сохраняет только 1-ю форму. И когда я сохраняю вторую форму, она очищает значения 1-й и 3-й формы.

Вот мой код:

Просмотры / EMP / Индекс:

@using (Html.BeginForm("Edit", "EMPs", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="personalsubmit" class="btn btn-success" />
        </div>
    </div>
}

@{ Html.RenderAction("Index", "EMP_REFERENCE", new { id = Model.eMP.lineno });}

@using (Html.BeginForm("Edit", "EMPs", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="jobsubmit" class="btn btn-success" />
        </div>
    </div>
}

 @{ Html.RenderAction("Index", "EMP_BENEFITS", new { id = Model.eMP.lineno });}

@using (Html.BeginForm("Edit", "EMPs", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="otherssubmit" class="btn btn-success" />
        </div>
    </div>
}

EMPsController

 public ActionResult Edit([Bind(Include = "lineno,EMPNO,IDNO..")] EMP eMP)
        {
            if (ModelState.IsValid)
            {
                if (Request.Form["personalsubmit"] != null)
                {
                    db.Entry(eMP).State = EntityState.Modified;
                    db.SaveChanges();

                }
                if (Request.Form["jobsubmit"] != null)
                {
                    db.Entry(eMP).State = EntityState.Modified;
                    db.SaveChanges();

                }
                if (Request.Form["otherssubmit"] != null)
                {
                    db.Entry(eMP).State = EntityState.Modified;
                    db.SaveChanges();

                }

                return Redirect(Request.UrlReferrer.PathAndQuery);
            }
            return View(eMP);
       }

Я не мог поместить их все в одну форму, потому что я использовал ajax beginForm между ними для другого грубого метода. Поскольку я читал, что вложенные формы не рекомендуются.

Есть ли способ сохранить одну форму без очистки значений других форм?


person Athena    schedule 12.03.2020    source источник


Ответы (1)


Есть ли способ сохранить одну форму без очистки значений других форм?

  1. Вы можете просто использовать ajax.beginform для каждой из этих форм; Как использовать простую форму Ajax Beginform в Asp.net MVC 4?

  2. Или вы можете создать свою собственную реализацию ajax https://www.c-sharpcorner.com/blogs/using-ajax-in-asp-net-mvc

  3. Или вы можете просто привязать все к своей модели;

// don't need to specify which properties to bind, all of the available properties in your view will be bound to the model on POST
public ActionResult Edit(EMP eMP)
{
   if(eMP.FirstName!=null ...){
      // ... do some checking depending on what values are submitted
   }
   // save profile here
   // when you return the view
   return View(eMP);
}

но для этого метода вам нужно иметь только 1 форму для личных, рабочих и других.


@{ Html.RenderAction("Index", "EMP_REFERENCE", new { id = Model.eMP.lineno });}

@{ Html.RenderAction("Index", "EMP_BENEFITS", new { id = Model.eMP.lineno });}

@using (Html.BeginForm("Edit", "EMPs", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <!--put all your employee input fields here-->
    <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="submit" class="btn btn-success" />
        </div>
    </div>

   <!--put all your job input fields here-->
   <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="submit" class="btn btn-success" />
        </div>
    </div>

    <!--put all your others input fields here-->
    <div class="form-group">
        <div class="pull-right">
            <input type="submit" value="Update" name="submit" class="btn btn-success" />
        </div>
    </div>
}
person Jerdine Sabio    schedule 12.03.2020
comment
Спасибо за предложения, но я не мог использовать только одну форму для Personal, Job и Others, поскольку RenderAction между этими формами - это ajax beginForm (тогда это будет вложенная форма), кроме того, это изменит их категорию порядка - person Athena; 12.03.2020
comment
@AthenaLouisePaz единственный способ, о котором я мог думать, - это 1 и 2 через ajax. - person Jerdine Sabio; 12.03.2020
comment
@ Афина Круто, удачи. Если вам что-то мешает, обязательно укажите код полного просмотра (html). - person Jerdine Sabio; 12.03.2020