0

Это немного глотка, но у меня есть два раскрывающихся списка, на мой взгляд:MVC Динамически передать модель в PartialView с видом на изменение DropDownList

<div> 
@Html.LabelFor(m => m.APlayerID) 
@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz" }) 
</div> 

<div> 
@Html.LabelFor(m => m.EPlayerID) 
@Html.DropDownListFor(m => m.EPlayerID, Model.EdzPlayers, "Please select", new { id = "edz" }) 
</div> 

Под этим я имею частичный вид:

<div id="partialview" class="panel-body"> 
@Html.Partial("SingleResultsView", Model.SingleResults) 
</div> 

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

Я посмотрел кучу примеров на это, но не могу найти ничего, что проходит отфильтрованный Model.SingleResults.Where (х => x.abzID == ABZ & & x.edz == EDZ) через. Мое мнение находится в общей папке, поэтому у него нет контроллера, это всегда проблема при поиске решений, поскольку все, кажется, дают контроллер/просмотр URL!

Я был в состоянии отобразить PartialView, используя что-то вроде этого, но это, очевидно, ничего с АБЗ и Edz (значения из выпадающего списка), а я не знаю, как передать модель не делает:

$(function() { 

    $('#abz').change(function() { 
     var value = $(this).val(); 


     $.ajax({ 
      url: "@Url.Content("Shared/SingleResultsView")", 
      type: 'GET', 
     cache: false, 
     success: function (value) { 
      $("#partialview").html(value); 
     } 
    });  
    }); 
}); 

Помощь была бы высоко оценена!

Заранее спасибо

ответ

1

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

public ActionResult SingleResults(string abzID, string edz) 
{ 
    // do something with the passed params 
    return PartialView("SingleResultsView", model) // where model is an instance of what the view needs to render itself with 
} 
0

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

public class Players : IController 
{ 
    //This is the method that loads the first page 
    public ActionMethod Index() 
    { 
     return View(); 
    } 

    //This method loads the partial html on change 
    [HttpPost] 
    public ActionMethod GetPartialView(int? abz) 
    { 
     var item = items.SingleResults.Where(x=>x.abzID == abz && x.edz == edz) 
     return View("partialViewName", item); 
    } 
} 

выше контроллер использует POST (я предпочитаю это, но вы можете использовать GET, а), чтобы отправить запрос к контроллеру, чтобы получить HTML. Затем вы строите свой JavaScript, как так (при условии, JQuery, верно?):

$(document).ready(function() { 

    $('#abz').change(function() { 
     var value = $(this).val(); 
     $.ajax({ 
      url: "Players/GetPartialView", 
      type: 'POST', 
      data: { abz: $(this).val() } 
      cache: false, 
      success: function (value) { 
       $("#partialview").html(value); 
      } 
     });  
    }); 
}); 
0

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

$.ajax({ 
     url: "@Url.Action("yourAction", "yourController", new { someinput = someValue})", 
     type: 'GET', //could also be post 
    cache: false, 
    success: function (value) { 
     $("#partialview").html(value); 
    }); 

ваш Контроллер илит действие будет выглядеть так:

public ActionResult SomeAction(<yourType> someInput){ 
... //Do something with input 
return PartialView("Shared/SingleResultsView", <your model that SingleResultsView takes>) 

}

Вы также можете использование onchange атрибут для DropDownFor хелпер:

@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz", onchange = "javascript: someFunction();" }); 

 Смежные вопросы

  • Нет связанных вопросов^_^