【问题标题】:Ajax with partial view: getting complete postback带有部分视图的 Ajax:获得完整的回发
【发布时间】:2012-01-06 15:57:36
【问题描述】:

我有一个视图,我正在尝试执行 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 中完成所有这些工作,并且我在其他地方也做过,但在这种情况下,出于不值得探讨的原因,如果可以使其工作,那将是最简单、最干净的,最容易理解的解决方案。

【问题讨论】:

    标签: ajax asp.net-mvc-3


    【解决方案1】:

    我已经检查过了,我正在加载 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>
    

    【讨论】:

    • F*ing Microsoft -- 默认的 MVC 模板不包含对 jquery.unobtrusive-ajax 的引用,它可能应该因为 @Html.Ajax 有点需要它......失去了一天感谢这个。另外,仅供参考,您可能需要参考缩小版本
    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 2014-03-30
    • 1970-01-01
    • 2014-08-31
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多