Несколько форм на одной странице просмотра - PullRequest
1 голос
/ 12 марта 2020

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

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

Вот мой код:

Просмотры / EMPs / Index:

@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 между ними для другого метода crud. Поскольку я прочитал, что вложенные формы не рекомендуются.

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

1 Ответ

1 голос
/ 12 марта 2020

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

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

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

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

// 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>
}
...