当我在Index.aspx页面上更改下拉列表时,如何使用Ajax,jQuery更新数据? 我有一个带有ProjectList下拉列表的页面,该页面应显示与该项目相关的所有问题。
如果我更改了Controller操作的返回值,请参阅注释代码,它会删除母版页,只是加载PartialView或者不加载任何内容。我也尝试过这样的事情:返回PartialView(“MyIssues”,paginatedIssues);
使用下面的代码,我可以使用Ajax更改页面,但是没有返回正确的数据或html来刷新PartialView。
那么我做错了什么或如何完成数据刷新?
的Index.aspx
<label for="ProjectList">Project:</label>
<%= Html.DropDownList("ProjectList", "--All--") %>
<div id="divMyIssues"><% Html.RenderPartial("MyIssues", Model); %></div>
<script type="text/javascript">
$(document).ready(function() {
$("#ProjectList").change(function() {
CanIRefresh();
});
});
function CanIRefresh() {
$.ajax({
type: "POST",
url: "/Issue/" + "Index",
dataType: "html",
data: {
page: 5// just changing the page to see if it updates the
//partialView, if it does change I can then pass ProjectId
//to filter.
},
success: function(v) {
RefreshData(v);
},
error: function(v, x, w) {
//Error
}
});
}
function RefreshData(v) {
$("div#divMyIssues").html(v);
return;
}
</script>
IssueController.cs
public ActionResult Index(int? page)
{
// Load the Project List
var projectList = new SelectList(_db.Project.ToList(), "ProjectId", "Name");
ViewData["ProjectList"] = projectList;
const int pageSize = 10;
var myIssues = issueRepository.MyIssues2();
var paginatedIssues = new PaginatedList<IssueSummary>(myIssues, page ?? 0, pageSize);
ViewData.Model = paginatedIssues;
// Adding for returning partial view
//if (Request.IsAjaxRequest())
// return PartialView("MyIssues", paginatedIssues);
//else
// return View(paginatedIssues);
return View(paginatedIssues);
}
MyIssues.ascx
<ul>
<% foreach (var m in ViewData.Model)
{ %>
<li> <a href="<%= Url.RouteUrl("Default",
new { id = m.Id, controller = "Issue", action = "Details" })%>">
<%= m.Title %></a>
</li>
<% } %>
</ul>
<div class="pagination">
<% if (Model.IsPreviousPage) { %>
<%= Html.RouteLink("<<<", "MyIssues",
new { page=(Model.PageIndex-1) }) %>
<% } %>
<% if (Model.IsNextPage) { %>
<%= Html.RouteLink(">>>", "MyIssues",
new { page = (Model.PageIndex + 1) })%>
<% } %>
</div>
答案 0 :(得分:1)
您可以使用精彩的jQuery表单插件:http://malsup.com/jquery/form/并让ddl更改事件提交表单。
$(document).ready(function() {
var options = {
target:'#divMyIssues',
};
$('form').ajaxForm(options);
$("#ProjectList").change(function() {
$('form').submit();
});
});
您可以在API文档中阅读目标选项的工作原理,它尽可能简单。
然后阅读本教程(但您似乎已经了解了Request.IsAjaxRequest())
http://www.asp.net/learn/mvc/tutorial-32-cs.aspx
答案 1 :(得分:0)
不确定这会有所帮助,但在过去一周左右我一直在做类似的事情。
我没有使用$ .ajax我使用$ .Post。但观点结尾的重要事情是在声明的最后加上, "json")
。当我返回Json数据时,我可以通过它来使用它。在我背后的代码中,我必须执行return Json(mydata
,以便我可以实际通过返回的集合进行迭代。
我在其他地方也做了return PartialView("commentList"
,在客户端我做了
$.post("/jQueryTests/jQueryAddMessageComment", { commentText: commentText }, function(newComment) {
$("#divComments" + id.toString()).html(newComment);
});
我不确定这有什么帮助,但是对我来说有什么帮助,不是从小开始,而是从那里开始建立。
如果你想要更多,请告诉我,我会尽力提供。但我不是Jquery专家。