Как правильно собирать данные из формы, имеющей PartialView, которая изменяется в зависимости от условия - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть ParentView, который имеет несколько собственных полей.Это ParentView отображает один PartialView из 3 различных PartialViews на основе раскрывающегося списка, выбранного в ParentView.Так что есть PartialViewA, PartialViewB и PartialViewC.За один раз будет предоставлен только один.У каждого своя таблица т.е.Модельный класс.

Eg: PartialViewAModel:ParentViewModel .. и так далее.

Один из способов сбора данных - использовать FormCollection.Так что, если dropdownvalue ИИ будет знать, какие ключи мне нужно выбрать и где хранить.

Но есть ли более элегантный способ связывания данных?Если бы был только один вид и модель, я бы просто использовал Modelclass в привязке.Например: убличный

  [HttpPost]
ActionResult Create(CustomerClass cust)

1 Ответ

0 голосов
/ 09 ноября 2018

Если вы укажете модель родительского вида, которая имеет дочерние модели частичного просмотра, например:

public class ParentViewModel
{
    public ParentViewModel()
    {
        PartialViewModel1 = new PartialViewModel1();
        PartialViewModel2 = new PartialViewModel2();
        PartialViewModel3 = new PartialViewModel3();
    }

    public string PartialViewType { get; set; } /* Value to determine which view to show */

    public PartialViewModel1 PartialViewModel1 { get; set; }
    public PartialViewModel2 PartialViewModel2 { get; set; }
    public PartialViewModel3 PartialViewModel3 { get; set; }
}

Где модели частичного вида, например PartialViewModel1, имеют свойства, уникальные для этой модели вида, например:

public class PartialViewModel1
{
    public string Property1_1 { get; set; }
    public string Property1_2 { get; set; }
    public string Property1_3 { get; set; }
}

Вы можете указать родительский вид, чтобы он имел форму, содержащую частичные представления, которые можно переключать на стороне клиента с помощью небольшого количества JavaScript (который я не включил, но должен быть достаточно простым :)):

@model Models.ParentViewModel
@using (Html.BeginForm("Update", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(x => x.PartialViewType) /* Change this to a drop down */

    @Html.Partial("PartialView1")
    @Html.Partial("PartialView2")
    @Html.Partial("PartialView3")

    <input type="submit" value="Submit" />
}

Частичные виды выглядят следующим образом, например, для PartialView1:

@model Models.ParentViewModel
<h3>Partial View 1</h3>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_1)</p>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_2)</p>
<p>@Html.TextBoxFor(x => x.PartialViewModel1.Property1_3)</p>

Итак, теперь вы можете выполнить действие Update на вашем контроллере, пройдя через ParentViewModel:

[HttpPost]
public ActionResult Update(ParentViewModel model)
{
    // Do whatever processing required.
    // You can switch on model.PartialViewType to process the appropriate PartialView fields

    return View("Index", model);
}

При отправке модель должна содержать все, что было отправлено в соответствующих свойствах модели с частичным представлением.

Надеюсь, это поможет!

...