2016-12-22 5 views
0

У меня возникли проблемы с обновлением частичного представления в моем индексном представлении. В принципе, на основе щелчка, я хотел бы иметь обновленную информацию.Нужно моделировать @ Html.action() нажатием кнопки

//controller 
    public ActionResult Index() 
    { 
     var filteredObservations = getFilteredObservationSessions().ToList(); 
     var observationManagementVm = new ObservationManagementVM(filteredObservations); 

     return View(observationManagementVm); 
    } 

    public ActionResult indexPagedSummaries(int? page, List<ObservationSessionModel> data) 
    { 
     var alreadyFilteredObservations = data; 
     int PageSize = 10; 
     int PageNumber = (page ?? 1); 

     return PartialView(alreadyFilteredObservations.ToPagedList(PageNumber, PageSize)); 
    } 

Мой главный вид

//index.cshtml 
@model AF.Web.ViewModels.ObservationManagementVM 
.... 
<div id="testsim"> 
    @Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions }) 
</div> 
<input id="new-view" value="Sessions" type="button" /> 

<script> 
$("#new-view").click(function() { 
    $.ajax({ 
    type: "GET", 
    data: { data: "@Model.FeedBackSessions" }, 
    url: '@Url.Action("indexPagedSummaries")', 
    cache: false, 
    async: true, 
    success: function (result) { 
    console.log(result); 
     $('#testsim').html(result); 
     $('#testsim').show(); 
     } 
    }); 
}); 
</script> 
.... 

И мой частичный вид

//indexPagedSummaries.cshtml 
@model PagedList.IPagedList<AF.Services.Observations.ObservationSessionModel> 
@using (Html.BeginForm("indexPagedSummaries")) 
{ 

    <ol class="vList vList_md js-filterItems"> 
     @foreach (var item in Model) 
     { 
      @Html.DisplayFor(modelItem => item) 
     } 
    </ol> 
    <div> 
     Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount 

     @Html.PagedListPager(Model, page => Url.Action("Index", 
           new { page })) 
    </div> 
} 

Html.Action() возвращает то, что я хочу отлично, но это, кажется, не в состоянии быть вызванный нажатием кнопки.

Таким образом, я не получаю никаких ошибок, но URL-адрес не возвращает никаких данных. Когда я пытаюсь запустить url Observation/indexPagedSummary без передачи данных, я получаю ошибку System.ArgumentNullException, поэтому я предполагаю, что что-то переносится в модель представления. Любая помощь была бы настолько оценена.

ответ

1

Не запустить свой код, но я считаю, что это происходит потому, что вы не посылать данные вместе с @ Url.Action

Main Вид:

//index.cshtml 
@model AF.Web.ViewModels.ObservationManagementVM 
.... 
<div id="testsim"> 
    @Html.Action("indexPagedSummaries", new { data = Model.ObservationSessions }) 
</div> 
<input id="new-view" value="Sessions" type="button" /> 

<script> 
$("#new-view").click(function() { 
    $.ajax({ 
    type: "GET", 
    data: { data: "@Model.FeedBackSessions" }, 
    url: '@Url.Action("indexPagedSummaries", "[Controller Name]", new { data = Model.ObservationSessions})', 
    cache: false, 
    async: true, 
    success: function (result) { 
    console.log(result); 
     $('#testsim').html(result); 
     $('#testsim').show(); 
     } 
    }); 
}); 
</script> 

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

+0

Привет Калеб, Спасибо за ваш комментарий. К сожалению, добавление ваших изменений не повлияло на результат - я все равно получаю тот же ответ. Я проверил генерируемые URL, и похоже, что они фактически создают один и тот же. Если это помогает: http: // localhost: 60985/Observation/indexPagedSummaries? Data = System.Collections.Generic.List% 601% 5BAF.Services.Observations.ObservationSessionModel% 5D & data = System.Collections.Generic.List% 601% 5BAF. Services.Observations.ObservationSessionModel% 5D & _ = 1482453264080 –

+0

У него есть данные в нем дважды, так в чем же разница между @ Model.FeedBackSessions и @ Model.ObservationSessions? –

+0

Сессии обратной связи - это подмножество сеансов наблюдения, новые и отфильтрованные данные, которые я хотел бы передать в свое частичное представление. –

0

Измените строку данных Ajax это:

data: { data: JSON.stringify(@Model.FeedBackSessions) }, 

Вы также можете добавить эти строки в AJAX:

dataType: 'json', 
contentType: 'application/json; charset=utf-8', 

Вы можете увидеть в одном из ваших комментариев выше этого тока URL-адрес формируется с описанием объекта списка, а не его содержимым:

http://localhost:60985/Observation/indexPagedSummaries? данные = System.Collections.Generic.List% 601% 5BAF.Services.Observations.ObservationSessionModel% 5D = & данные System.Collections.Generic.List% 601% 5BAF.Services.Observations.ObservationSessionModel% 5D & _ = 1482453264080

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

например:

<script> 
    var temp = []; 

    @foreach (var item in Model.FeedBackSessions){ 
     @:temp.push(@item); 
    } 
</script> 

, а затем data: { data: JSON.stringify(temp) },