C# ajaxcall后网格未更新
我正在创建自己的过滤器。过滤器有一个dropdownlist,当这个dropdownlist改变时,jquery将对相应的HTTPPOST-controller操作进行ajaxcall。在这个操作中,我过滤列表并将其传递给我的视图 一旦列表到达我的视图,webgrid就不会更新。下面是一些代码和一些调试信息,以显示发生了什么 控制器 正常动作C# ajaxcall后网格未更新,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在创建自己的过滤器。过滤器有一个dropdownlist,当这个dropdownlist改变时,jquery将对相应的HTTPPOST-controller操作进行ajaxcall。在这个操作中,我过滤列表并将其传递给我的视图 一旦列表到达我的视图,webgrid就不会更新。下面是一些代码和一些调试信息,以显示发生了什么 控制器 正常动作 public ActionResult Projects() { IEnumerable<Project>
public ActionResult Projects()
{
IEnumerable<Project> projects = Adapter.ProjectRepository.Get();
int test = projects.Count();
List<ProjectsDisplayViewmodel> projectsView = new List<ProjectsDisplayViewmodel>();
string strCats = "";
foreach (Project prj in projects)
{
strCats = "";
Mapper.CreateMap<Project, ProjectsDisplayViewmodel>();
ProjectsDisplayViewmodel newProject = Mapper.Map<Project, ProjectsDisplayViewmodel>(prj);
foreach (Category cat in prj.Categories)
{
strCats += cat.CategoryName + ", ";
}
newProject.strCategories = strCats;
projectsView.Add(newProject);
}
ViewBag.Categories = new SelectList(Adapter.CategoryRepository.Get(), "CategoryID", "CategoryName");
/*projectsview contains 4 projects now*/
return View(projectsView);
}
我只是注意到控制台中没有打印任何内容。日志。。。。不是成功,也不是错误函数。在AJAX请求的
success
回调中(除了console.log
调用之外),您似乎没有做任何事情。所以没有任何更新是完全正常的。如果希望发生这种情况,则需要手动更新DOM
因此,您应该修改HttpPost
控制器操作,使其返回包含网格的PartialView。然后在成功回调中,将新收到的部分注入DOM:
success: function (response) {
$('#some_id_of_a_containing_div').html(response);
console.log("succes");
},
在本例中,应将局部视图包装到包含div的文件中,该文件将在此处更新:
<div id="some_id_of_a_containing_div">
@Html.Partial("Partial_Containing_Your_Grid")
</div>
@Html.Partial(“包含您的网格的部分”)
能否显示进行AJAX调用的代码?或者它是一个Ajax.BeginForm
?@DarinDimitrov我想是WebGrid在处理它。你检查了Chrome/Firefox/IE控制台的错误了吗?如果帖子到达服务器,可能是空响应或任何java脚本错误@DarinDimitrov我在编辑中添加了ajaxcall。。。在我的控制台中没有错误…是的,我明白了。但是,除了将结果输出到控制台之外,在成功回调中不做任何事情。您需要让您的控制器操作返回一个包含更新网格的部分,您应该将其重新注入DOM.Hmmm,我不明白为什么需要在jquery中修改html。。。我怀疑我返回的列表视图会自动更改webgrid…哦,不,没有任何东西会自动更新。您正在向控制器操作发出AJAX请求,该操作将返回某些内容(在您的案例中是一个视图),但您应该在成功回调中对结果进行处理。否则,不要期望任何事情发生。现在你只是在制造一场火灾,忘记放弃结果的呼叫。从控制器操作返回视图并不意味着页面将自动更新。jQuery对视图一无所知。它甚至对ASP.NETMVC一无所知。好的,谢谢,我会试试看。现在就得走了,明天会发帖子吗,如果行的话,或者我的问题是什么。提前谢谢!在ajaxcall中,我收到一个错误,因此ajax执行error函数而不是success函数。。。有什么问题吗?我的控制器的返回值是:返回视图(projectsView);我的控制器没有错误你确定视图存在吗?在FireBug中查看服务器的确切响应。
$("#Categories").change(function () {
var param = $(this).val();
$.ajax({
type: "POST",
url: "/Project/Projects",
data: { catID: $(this).val(), strSearch: 'test' },
dataType: "json",
success: function (response) { console.log("succes"); },
error: function (xhr, ajaxOptions, thrownError) {console.log("error"); }
});
});
success: function (response) {
$('#some_id_of_a_containing_div').html(response);
console.log("succes");
},
<div id="some_id_of_a_containing_div">
@Html.Partial("Partial_Containing_Your_Grid")
</div>