我有一个Test视图,显示一个复选框表,用户可以从中选择一个或多个要运行的测试。
我希望这些测试在不同的视图中运行,以便我可以为每次测试运行显示错误和警告。
在Test视图中,我正在对RunTest控制器进行ajax调用:
var testsToRun = [];
// Enumerate Test checkboxes
var chk = document.getElementsByName('test');
var len = chk.length;
for (var i = 0; i < len; i++) {
if (chk[i].type === 'checkbox'
&& chk[i].checked) {
var test = new Object();
test.Action = chk[i].id;
testsToRun.push(test);
}
}
if (testsToRun.length > 0) {
$.ajax({
url: "@Url.Action("Index", "RunTest")",
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ 'testsToRun': testsToRun}),
cache: false,
success: function (result) {
},
error: function (result) {
}
});
}
这一切都有效。我的RunTests控制器的Index方法按预期调用。
RunTests控制器的Index方法然后返回RunTest视图:
public ActionResult Index(List<Test>testsToRun)
{
return View("~/Views/RunTest.cshtml");
}
我在return语句上设置了一个断点,我的代码到达那里,但RunTest视图从不显示。我的测试视图仍然是显示的视图。
我已经研究了RedirectToAction方法之类的东西,但似乎没有任何工作,因为我可能甚至没有找到合适的区域。
答案 0 :(得分:1)
您尝试使用jQuery的$.ajax
方法而不在回调中执行任何操作。它没有等同于普通html POST表单的target=
attribute;相反,您应该在success
和/或error
回调中处理它,例如:
success: function(data, status, jqXHR) {
$(myContainer).html(data);
}
更多可用信息in the documentation.
聚苯乙烯。我认为return View(...
的返回类型应该是dataType: "html"
而不是dataType: "json"
,但我可能错了。
PPS。考虑使用short-hand post,因为它更具可读性