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