Частичное представление перенаправляет вместо заполнения div - PullRequest
1 голос
/ 02 марта 2012

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

@Ajax.ActionLink("Select", "DisplayPOItems", new { id = Model.poList[0].ID }, new AjaxOptions
{
     UpdateTargetId = "POItems",
     HttpMethod = "GET",
     InsertionMode = InsertionMode.Replace,
})

Я также попробовал просто ссылку действия с этим:

$("#POSelect").click(function () {
     $.get('@Url.Action("DisplayPOItems","PO", new { id = Model.ID })', function () {
     $('#POItems').load(this.href);
     return false;
     });
});

ИЛИ подобный блок, используя ajax, чтобы отловить событие click и попытаться заполнитьчастичный взгляд на div в моей форме таким образом.Все эти методы заполняют данные, но они всегда перенаправляются в ... / PO / DisplayPOItems / 1 и показывают там только частичное представление.Вот мой контроллер:

public PartialViewResult DisplayPOItems(int ID)
{
     ItemModel im = new ItemModel();
     return PartialView("_GridItem", im.POSearchResult(ID));
}

Я также пробовал ActionResult на контроллере, но это не помогло.Как я могу заставить страницу не перенаправлять и просто заполнить div в моей форме с моим частичным представлением?

Ответы [ 3 ]

3 голосов
/ 03 июля 2013

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

вам нужно запустить два java-скрипта на главной странице, где вы хотитесделать другие частичные представления.в моем приложении используется только помощь unobstrusive-ajax dint.

вот сценарии.

<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

вашей странице просмотра также требуется

@using (Ajax.BeginForm("Search", new AjaxOptions() { UpdateTargetId = "results" }))
    {

идентификатор цели будетв теге div

<div id="results">
@renderpartial("results")
</div>

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

Надеюсь, это поможет.

2 голосов
/ 02 марта 2012

Если вы решили использовать Ajax.ActionLink, убедитесь, что вы указали скрипт jquery.unobtrusive-ajax.js на своей странице:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

И если вы решите использовать обычный jQuery, убедитесь, что вы отправляетеодин AJAX-запрос вместо двух, как вы делаете сейчас.Также убедитесь, что вы возвращаете false в правильном месте:

$('#POSelect').click(function () {
     var url = '@Url.Action("DisplayPOItems", "PO", new { id = Model.ID })';
     $.get('url', function (result) {
         $('#POItems').html(result);
     });
     return false;
});

или его эквиваленте:

$('#POSelect').click(function () {
     var url = '@Url.Action("DisplayPOItems", "PO", new { id = Model.ID })';
     $('#POItems').load(url);
     return false;
});

или если ваша ссылка уже содержит правильный URL:

$('#POSelect').click(function () {
     $('#POItems').load(this.href);
     return false;
});
1 голос
/ 02 марта 2012

У меня есть плагин jQuery для такого рода вещей.

$ ->
    $.fn.LoadViewInline = (url,target,useInline,callback) ->
        #debugger
        $.disableEventPropagation(event);
        if(!url)
            url = $(this).data("inline-url")
        if(!useInline)
            useInline = $(this).data("inline")
        if useInline == "True" or useInline == true 
            if(!target)
                target = $(this).data "inline-target"
            if(!targetSelectorPrefix)
                targetSelectorPrefix = "#"
            $(targetSelectorPrefix + target).load url, callback
        else
            window.location.href = url
        return false

Используется что-то вроде:

@Html.ActionLink("Add a Claimant", "Index", "Property", 
    new RouteValues().With("fnolid", Fnolid),
    HtmlValues.WithClass("header")
    .Data("inline-url", dataInlineNewClaimantUrl)
    .Data("inline-target", dataInlineTarget)
    .Data("inline", dataInline)
    .With("onclick", "return $(this).LoadViewInline();")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...