Ajax с частичным представлением: получение полного постбэка - PullRequest
2 голосов
/ 06 января 2012

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

Вот соответствующий фрагмент вида:

<fieldset>
<legend>Available Instructors</legend>

<p>
    @{ using (Ajax.BeginForm("InstructorSearch", "CourseSection", new AjaxOptions() { UpdateTargetId = "divSearchResult" })) 
       {

        @Html.Raw(" Search: ")
        <select id="SearchType" name="SearchType">
            <option value="Last" @( (ViewBag.SearchType == "Last") ? " selected" : "")>Last Name</option>
            <option value="First" @( (ViewBag.SearchType == "First") ? " selected" : "")>First Name</option>
        </select>
        @Html.Raw(" ")
        <input type="text" id="SearchText" name="SearchText" value="@( ViewBag.SearchText)" />
        @Html.Raw(" ")
        <input type="submit" id="Search" name="Search" value="Search" />
       }
    }
</p>

<div id="divSearchResult"></div>
</fieldset>

Вот метод на контроллере:

[HttpPost]       
public PartialViewResult InstructorSearch(string searchType, string searchText)
{
    var list = Services.InstructorService.ListInstructors(
        base.CurrentOrganizationId.Value,
        (searchType == "First") ? searchText : null,
        (searchType == "Last") ? searchText : null,
        0,
        Properties.Settings.Default.InstructorListPageSize
        );
    return PartialView(list);
}

Я проверил и загружаю MicrosoftAjax.js и MicrosoftMvcAjax.js.

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

1 Ответ

4 голосов
/ 06 января 2012

Я проверил и загружаю MicrosoftAjax.js и MicrosoftMvcAjax.js.

Эти сценарии устарели в ASP.NET MVC 3. Вы можете полностью удалить их со своего сайта. Они бесполезны. Они включены только для обратной совместимости, если вы выполняли обновление с предыдущих версий, и в этом случае вы должны явно отключить ненавязчивый AJAX в своем файле web.config:

<!-- Remark: don't do this => only for demonstration purposes -->
<add key="UnobtrusiveJavaScriptEnabled" value="false"/>

В ASP.NET MVC 3 Ajax.* помощники по умолчанию используют jQuery. Поэтому необходимо ссылаться на jquery.unobtrusive-ajax.js, что заставляет Ajax.* помощников работать:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...