2016-05-19 3 views
0

У меня есть следующий раскрывающийся список для фильтрации результатов на основе выбранного курса. Следующий div копируется в 5 разных представлений, так как во всех этих представлениях мне нужно отфильтровать некоторые данные на основе выбранного курса из выпадающего списка.Использование Partial View и Jquery для включения выделения из одного и того же выпадающего списка в разных представлениях

<div class="row"> 
    <div class="col-sm-8 text-center"> 
     @Html.DropDownList("Courses", null, htmlAttributes: new { @class = "form-control" }) 
    </div> 
    <div class="col-sm-2"> 
     <a class="btn btn-info filterbycourse"> FILTER</a> 
    </div> 
</div> 

В каждом из этих представлений у меня есть следующий скрипт, который задает URL-адрес действия. Следующий код имеет Badge в качестве контроллера. Однако в других 4 режимах контроллер отличается. Таким образом, только имя controller изменяется в сценарии через представления.

<script> 
    $(function() { 
     $(".filterbycourse").click(function() { 
      var course_id = $('#Courses').val(); 
      var url = '@Url.Action("Index", "Badge", new { CourseId = "----" }, null)'; 
      url = url.replace("----", course_id); 
      window.location = url; 
     }); 
    }); 
</script> 

Я знаю, что я могу создать частичный вид для этого. Тем не менее, мне все равно придется иметь сценарий jQuery во всех представлениях, которые используют частичный вид. Интересно, есть ли эффективный способ справиться с этой ситуацией?

+1

Если вы хотите использовать частичный, то вы всегда можете передать значение частичному указанию имени контроллера - '@ Html.Partial (" ... ", new {controller =" ... "})' to build url –

ответ

1

Вы можете оставить раскрывающийся список в частичном виде и использовать его. Для скрипта, который обрабатывает событие click, вам нужно его хранить только в одном месте, но использовать разные базовые URL для разных страниц.

Так что в ваших indidual просмотров/страниц, которые использует этот частичный, вы должны установить базовый URL, как этот

@section Scripts 
{ 
    <script> 
    var settings = settings || {}; 
    settings.SearchUrl="@Url.Action("Search","Badge", new { CourseId = "----" })";  
    </script> 
} 

и обновить общий сценарий, чтобы прочитать это значение из текущей страницы и использовать, чтобы построить окончательный URL.

$(function() { 
    $(".filterbycourse").click(function() { 
     var course_id = $('#Courses').val(); 
     var baseUrl = settings.SearchUrl; 
     var url = baseUrl ; 
     url = url.replace("----", course_id); 
     window.location.href = url; 
    }); 
}); 
+0

благодарит за ответ! Таким образом, для общего сценария требуется каждый просмотр, который использует частичное представление справа? – renakre

+0

Да. Я бы поместил его в ваш общий файл/макет скрипта. – Shyju