Обновить частичное представление со сложной моделью - PullRequest
0 голосов
/ 10 сентября 2018

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

МОДЕЛЬ

public class MainViewModel
{
    public FilterAModel FilterAModel { get; set; }
    public FilterBModel FilterBModel { get; set; }
}
public class FilterAModel
{
    public IEnumerable<int> SelectedItems { get; set; }
    public IEnumerable<SelectListItem> AllItems { get; set; }
}
public class FilterBModel
{
    public IEnumerable<int> SelectedItems { get; set; }
    public IEnumerable<SelectListItem> AllItems { get; set; }
}

VIEW

<div>
    @using (Html.BeginForm("GetDBValues", "Home",FormMethod.Post))
    {
        @Html.DropDownListFor(a => a.FilterAModel.SelectedItems,Model.FilterAModel.AllItems, new { multiple = "multiple" })
        @Html.DropDownListFor(b => b.FilterBModel.SelectedItems, Model.FilterBModel.AllItems, new { multiple = "multiple" })
        <input id="RegisterBtn" type="submit" />
    }
    <div id="testDiv">
        @{Html.RenderPartial("_PartialView", Model);}
    </div>
</div>

ЧАСТИЧНЫЙ ВИД

@model MainViewModel

<div>@Html.DisplayFor(m=>m.FilterAModel.SelectedItems)</div>
<div>@Html.DisplayFor(m => m.FilterBModel.SelectedItems)</div>

И КОНТРОЛЛЕР

    public ActionResult Index()
    {
        Entities context = new Entities();
        MainViewModel model = new MainViewModel();

        FilterAModel modelA = new FilterAModel();
        modelA.AllItems=new MultiSelectList(context.FilterATable,"Id","Text");

        FilterBModel modelB = new FilterBModel();
        modelB.AllItems = new MultiSelectList(context.FilterBTable, "Id", "Text");

        model.FilterAModel = modelA;
        model.FilterBModel = modelB;

        return View(model);
    }
    [HttpPost]
    public ActionResult GetDBValues(MainViewModel model)
    {
        //Code here to retrieve values from DB
        //...

        return PartialView("_PartialView",model);
    }

В этом примере я просто хочу обновить частичное представление без перезагрузки всего представления и сохранить выбор пользователя между вызовами.

Я хотел бы знать, возможно ли достичь этого без JQuery ... Если нет, я могу использовать этот тип сценария, но как передать модель параметризованному действию GetDBValues контроллера?

SCRIPT

<script type="text/javascript">
    $(function(){
        $('#RegisterBtn').click(function () {
            $("#testDiv").load('@Url.Action("GetDBValues", "Home")')
        });
    });
</script>

Большое спасибо за вашу помощь, это мое первое приложение MVC ...

...