部分视图的Ajax:获得完整的回发

时间:2012-01-06 15:57:37

标签: ajax asp.net-mvc-3

我有一个视图,其中我尝试执行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 个答案:

答案 0 :(得分:4)

  

我已经检查过了,我正在加载MicrosoftAjax.js和MicrosoftMvcAjax.js。

这些脚本在ASP.NET MVC 3中已过时。您可以从站点中完全删除它们。他们没用。它们仅用于向后兼容,如果您从以前的版本升级,则必须在web.config中明确禁用不显眼的AJAX:

<!-- 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>