TarunKumarSusarapu Ответов: 1

Как связать данные в comboboxes с помощью одного запроса linq с помощью отдельного запроса в MVC


Привет,

Здесь я взял четыре частичных представления на странице просмотра index.cshtml.

четыре частичных вида имеют разные модели.

Во всплывающем содержимом я вызываю частичное представление другой формы.

В этом частичном представлении я взял 5 полей со списком и хочу связать данные с помощью модели сущностей.

Для этого в контроллере я передаю один метод, который содержит запрос linq для получения данных 5 полей.

Я передал переменные Viewbag и ViewData для привязки списка и выбранного значения.

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

Я хочу знать, как использовать различные запросы linq для 5 различных комбинаций с одним и тем же списком.

Пожалуйста, предложите мне лучшие способы его достижения.

Что я уже пробовал:

Мою Страницу Индекса

@model Tuple<DevExpress.DashboardWeb.WorkingMode, DashboardDemo.Models.vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data>
@*@model DashboardDemo.Models.ViewModel.KPIViewModel*@


 @Html.Partial("~/Views/Home/DashboardPartial.cshtml")

@Html.Partial("~/Views/TreeView/VirtualModePartial.cshtml")

@Html.Partial("~/Views/Home/ForecastGridPartial.cshtml")

@Html.Partial("~/Views/Home/PopupPartial.cshtml")


PopupPartial.cshtml по

@model Tuple<DevExpress.DashboardWeb.WorkingMode, DashboardDemo.Models.vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data>
@*@model DashboardDemo.Models.ViewModel.KPIViewModel*@
@(Html.DevExpress().PopupControl(settings =>
           {
               settings.Name = "PopupControlSelectSub";
               settings.ShowOnPageLoad = false;
               settings.ShowMaximizeButton = true;
               settings.Width = 1200;
               settings.Height = 500;
               settings.CallbackRouteValues = new { Controller = "Home", Action = "Main_Menu" };
               settings.AllowDragging = true;
               settings.CloseAction = CloseAction.CloseButton;
               settings.PopupAnimationType = AnimationType.Slide;
               settings.HeaderText = "Main Menu";
               settings.Modal = true;
               settings.PopupHorizontalAlign = PopupHorizontalAlign.WindowCenter;
               settings.PopupVerticalAlign = PopupVerticalAlign.WindowCenter;
               settings.PopupElementID = "btnName_CD";
               settings.ScrollBars = ScrollBars.Horizontal;
               settings.SetContent(() =>
               {
                   Html.RenderPartial("Main_Menu");
               });
           }).GetHtml())


Main_Menu.cshtml по

@Html.DevExpress().DockPanel(
        settings =>
        {
            settings.Name = "panel1";
            settings.PanelUID = "panel1";
            settings.HeaderText = "Requester's Perimeter";
            settings.VisibleIndex = 0;
            settings.Width = 2000;
            settings.Height = 200;
            settings.ShowHeader = true;
            settings.ShowCloseButton = false;
            settings.AllowResize = true;
            settings.OwnerZoneUID = "leftZone";
            settings.Styles.Content.Border.BorderStyle = BorderStyle.Solid;
            settings.Styles.Content.Border.BorderWidth = 1;
            settings.Styles.Content.Border.BorderColor = Color.FromArgb(0xBBD7E7);
            settings.Styles.Content.BackColor = Color.FromArgb(0xDBEBF4);
            settings.Styles.Content.Paddings.Padding = 0;
            settings.SetContent(() =>
            {
                @Html.DevExpress().Label(
                    s =>
                    {
                        s.Name = "Label1";
                        s.Text = "Req Section:";
                    }
                    ).GetHtml();
                @Html.DevExpress().ComboBox(
                    q =>
                    {
                        q.Name = "ddl_Req_Section";
                        q.PreRender = (s, e) =>
                        {
                            if (ViewData["GetReqSel"] != null)
                            {
                                MVCxComboBox c = s as MVCxComboBox;
                                c.SelectedItem = c.Items.FindByValue(Model.Item2.txt_Req_Section);
                            }
                        };
                        //var s = ViewData["GetReqSel"].ToString();
                        //q.Properties.DataSource = DashboardDemo.Models.MainMenu.GetRequiredSelection();
                        //q.CallbackRouteValues = new { Controller = "Home", Action = "Main_Menu"};
                        q.Properties.ValueField = "txt_Req_Section";
                        q.Properties.TextField = "txt_Req_Section";
                        q.Properties.ValueType = typeof(string);
                        q.Properties.NullText = "All";
                        q.Properties.DropDownStyle = DropDownStyle.DropDown;
                        
                    }
                    ).BindList(ViewBag.GetReqsellist).GetHtml();
                @Html.DevExpress().Label(
                   a =>
                   {
                       a.Name = "Label2";
                       a.Text = "Req IPT:";
                   }
                   ).GetHtml();
                @Html.DevExpress().ComboBox(
                    b =>
                    {
                        b.Name = "ddl_Req_IPT";
                        b.PreRender = (s, e) =>
                        {
                            if (ViewData["GetReqIPT"] != null)
                            {
                                MVCxComboBox c = s as MVCxComboBox;
                                c.SelectedItem = c.Items.FindByValue(Model.Item2.txt_Req_IPT);
                            }
                        };
                        b.Properties.ValueField = "txt_Req_IPT";
                        b.Properties.TextField = "txt_Req_IPT";
                        b.Properties.ValueType = typeof(string);
                        b.Properties.NullText = "All";
                        b.Properties.DropDownStyle = DropDownStyle.DropDown;
                    }
                    ).BindList(ViewBag.GetReqsellist).GetHtml();
                @Html.DevExpress().Label(
                  c =>
                  {
                      c.Name = "Label3";
                      c.Text = "Req Group:";
                  }
                  ).GetHtml();
                @Html.DevExpress().ComboBox(
                    d =>
                    {
                        d.Name = "ddl_Req_Group";
                        d.PreRender = (s, e) =>
                        {
                            if (ViewData["GetReqGrp"] != null)
                            {
                                MVCxComboBox c = s as MVCxComboBox;
                                c.SelectedItem = c.Items.FindByValue(Model.Item2.txt_Req_Group);
                            }
                        };
                        d.Properties.ValueField = "txt_Req_Group";
                        d.Properties.TextField = "txt_Req_Group";
                        d.Properties.ValueType = typeof(string);
                        d.Properties.NullText = "All";
                        d.Properties.DropDownStyle = DropDownStyle.DropDown;
                    }
                    ).BindList(ViewBag.GetReqsellist).GetHtml();
                @Html.DevExpress().Button(
                    e=>
                    {
                        e.Name = "Filter_On_Parameter";
                        e.Text = "Filter On Parameter";
                    }
                    ).GetHtml();
                @Html.DevExpress().Button(
                 f =>
                 {
                     f.Name = "Reset_Scope";
                     f.Text = "Reset Scope";
                 }
                 ).GetHtml();
            });
            settings.ControlStyle.Border.BorderStyle = BorderStyle.None;
        }
).GetHtml()


Домашний контроллер. cs

public ActionResult Index()
       {
           GetReqSelection();
           WorkingMode workmode = new WorkingMode();
           vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data Current_Data = new vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data();
           var tuple = new Tuple<WorkingMode, vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data>(workmode, Current_Data);
           return View(tuple);
           //var BCVM = new Tuple<DevExpress.DashboardWeb.WorkingMode, vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data>(WorkingMode.Viewer,vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data.);
           //return View(new KPIViewModel());
           //string workingModeString = this.Request.QueryString["mode"];
           //var workingMode = !string.IsNullOrEmpty(workingModeString) && workingModeString == "designer" ? WorkingMode.Designer : WorkingMode.Viewer;
           //return View(workingMode);
       }
       void GetReqSelection()
       {
           using (var db = new KPIDataEntities())
           {
               var query = (from category in db.vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data
                            select new
                            {
                                category.txt_Req_Section,category.txt_Req_IPT,category.txt_Req_Group,category.txt_MP,category.txt_MP_Origin
                            }).Distinct().ToList();
               ViewBag.GetReqsellist = query.ToList();
               ViewData["GetReqSel"] = query[0].txt_Req_Section;
               ViewData["GetReqIPT"] = query[0].txt_Req_IPT;
               ViewData["GetReqGrp"] = query[0].txt_Req_Group;
               ViewData["GetMP"] = query[0].txt_MP;
               ViewData["GetMPOrigin"] = query[0].txt_MP_Origin;
               //KPIViewModel vw = new KPIViewModel();
               //vw.Current_Data.txt_Req_Section = query[0].txt_Req_Section;
           }
           //using (var db = new KPIDataEntities())
           //{
           //    var query = (from category in db.vw_100_QUERY_FOR_XLS_WEEK_IN_PROGRESS_016_Forecast_Follow_Current_Data
           //                 select new
           //                 {
           //                     category.txt_Req_IPT
           //                 }).Distinct().ToList();
           //    ViewBag.GetReqIPT = query.ToList();
           //    ViewData["GetReqIPT"] = query[0].txt_Req_IPT;
           //    //KPIViewModel vw = new KPIViewModel();
           //    //vw.Current_Data.txt_Req_Section = query[0].txt_Req_Section;
           //}
       }

Graeme_Grant

Существует много кода со сторонними элементами управления. Разбейте его на что-нибудь простое:
1. Добавить новый [Вам] &ампер; [пост] методы на геймпаде
2. Добавьте новое представление с кнопкой (post) и 5 списками с привязкой к данным (или ComboBoxes)
3. Добавьте код в метод [Post], чтобы получить данные и вернуть их в представление

Как только вы это сделаете, подключитесь к реальному просмотру.

TarunKumarSusarapu

Не могли бы вы подробно изложить сценарий на примере?

Graeme_Grant

Я пошел еще лучше и дал вам проект доказательства концепции... Это не является решением Ajax, поскольку оно не было оговорено в вопросе.

TarunKumarSusarapu

Не могли бы вы подробно изложить сценарий на примере?

Karthik_Mahalingam

использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

1 Ответов

Рейтинг:
0

Graeme_Grant

Цитата:
На погрузку уходит больше времени.Я хочу загрузить данные после нажатия кнопки не при загрузке страницы.

Как указано выше, чтобы все было просто, я собрал проект Proof-of-Concept. Вы можете поменять местами мои данные и обработку Ваших данных просмотра для вашего собственного тестирования.

Примечание: Это не является решением Ajax, поскольку оно не было оговорено в вопросе.

Объект данных для совместного использования с представлением:
public class TestData
{
    public bool IsLoaded { get; set; }
    public List<string> Answers1 { get; set; }
    public List<string> Answers2 { get; set; }
    public List<string> Answers3 { get; set; }
}

Контроллер:
public class HomeController : Controller
{
    [HttpPost]
    public ActionResult TestListPost(TestData request)
    {
        TempData["load"] = request?.IsLoaded;
        return RedirectToAction("TestList");
    }

    [HttpGet]
    public ActionResult TestList()
    {
        if (TempData.ContainsKey("load") &&
            !string.IsNullOrWhiteSpace(TempData["load"].ToString()))
        {
            return View(new TestData
            {
                Answers1 = new List<string>
                {
                    "Answer 1 - 1",
                    "Answer 1 - 2",
                    "Answer 1 - 3"
                },
                Answers2 = new List<string>
                {
                    "Answer 2 - 1",
                    "Answer 2 - 2",
                    "Answer 2 - 3"
                },
                Answers3 = new List<string>
                {
                    "Answer 3 - 1",
                    "Answer 3 - 2",
                    "Answer 3 - 3"
                },
                IsLoaded = true
            });
        }
        return View(new TestData());
    }
}

вид:
@model WebApplication1.Models.TestData
@{
    ViewBag.Title = "TestList";
}

<h2>TestList</h2>

@if (!Model.IsLoaded)
{
    Model.IsLoaded = true;
    using (Html.BeginForm("TestListPost", "Home", FormMethod.Post))
    {
        <button type="submit">Load Answers</button>
    }
}
else
{
    <p>Results</p>
    if (Model.Answers1 != null) { @Html.Partial("Answers", Model.Answers1); }
    if (Model.Answers2 != null) { @Html.Partial("Answers", Model.Answers2); }
    if (Model.Answers3 != null) { @Html.Partial("Answers", Model.Answers3); }
}

И частичный вид:
<ul>
@foreach (var item in Model)
{
    <li>@item.ToString()</li>
}
</ul>

Как это работает:

1. Когда вид TestList действие изначально загружается, отображается только кнопка. Вид устанавливает Model.isLoaded = true готов к обратной передаче
2. нажатие кнопки возвращает модель к действию контроллера. TestLoadPost
3. TestLoadPost устанавливает временную переменную состояния в TempData PropertyBag и перенаправляет обратно к действию загрузки формы TestList
4. В TestList действие проверяет, нужно ли ему загружать данные, и выполняет задачу, если задано значение temp
5. Теперь представление загружает и отображает данные


TarunKumarSusarapu

Привет Graeme_Grant,

Спасибо за Ваше объяснение с помощью примера.

Я понял ваш пример, но вот где я должен вызвать метод GetReqSelection ().

Я думаю, что он должен быть вызван в Post методе действия в контроллере.

Graeme_Grant

Данный пример загрузки в не после способ. Метод post принимает состояние ввода или загрузки в этом случае и вызывает (RedirectToAction(...)) метод get. Если требуется время для загрузки данных, то сделайте метод асинхронным...

TarunKumarSusarapu

Здесь мое требование заключается в том, что в первую очередь загружается страница.После нажатия кнопки должно появиться всплывающее окно, содержащее частичное представление Main_Menu.cshtml.
Здесь метод GetReqSelection (), содержащий linq-запрос для извлечения данных, должен быть вызван после нажатия кнопки.
Здесь я создал 4 частичных представления в index.cshtml.Одним из частичных представлений является popup.cshtml.
В этом всплывающем окне.я cshtml по оказанию main_Menu частичный вид, который содержит поле со списком.
Здесь я взял две модели, и это определено в кортеже.

Graeme_Grant

Вы хотите загрузить страницу, а затем нажать кнопку, которая в jQuery Аякс пост в контроллере метод действия [^] запросить и заполнить всплывающее окно (?) или представление (?) результирующими данными?

TarunKumarSusarapu

Пожалуйста, проверьте код, который я упомянул здесь, и предложите мне лучший способ