我试图用ajax-call调用视图,将ID传递给控制器方法。ID通过,一切都很好,直到我在返回词中调用视图为止。什么都没发生。
$("#btnCreatePackage").click(function () {
var workflowId = $("#workflowId")[0].value;
$.ajax({
url: '@Url.Action("Create", "package")',
type: 'get',
data: { id: workflowId },
success: function (data) {
return data;
},
timeout: 500
});
});
public ActionResult Create(int id) {
IList < Workflow > workflows = WorkflowService.GetWorkflowList();
ModifyPackageViewModel vm = new ModifyPackageViewModel
{
Package = null,
Workflow = workflows.SingleOrDefault(x => x.Id == id),
Workflows = workflows,
Hosts = ScalingService.GetHostList(),
SelectedHostNames = new List<string>(),
Factor = 1
};
if (!vm.SelectedHostNames.Any()) {
if (vm.Hosts.Any()) {
vm.SelectedHostNames.Add(vm.Hosts.First().Name);
}
}
return View(vm);
}
奇怪的是,如果我#m通过 @url.Action调用视图,而无需传递以下代码的ID,则可以正常工作。
<a href="@Url.Action("Create")">
<div class="submenu-item add">
neues paket anlegen
</div>
</a>
public ActionResult Create() {
IList<Workflow> workflows = WorkflowService.GetWorkflowList();
ModifyPackageViewModel vm = new ModifyPackageViewModel
{
Package = null,
Workflow = workflows.FirstOrDefault(),
Workflows = workflows,
Hosts = ScalingService.GetHostList(),
SelectedHostNames = new List<string>(),
Factor = 1
};
if (!vm.SelectedHostNames.Any()) {
if (vm.Hosts.Any())
{
vm.SelectedHostNames.Add(vm.Hosts.First().Name);
}
}
return View(vm);
}
在这两种情况下,控制器方法都被调用,无错误的结尾,在第一个情况下没有发生任何错误,在第二种情况下,一切都很好。
有人有任何想法吗????
谢谢,丹尼尔
您无法从AJAX调用中返回数据。您可以将其存储在室外声明的变量中,或者在成功处理程序中做某事。
这与您的成功处理程序(success: function(data) ...
)同样有效。要记住的主要内容是从您的控制器返回的数据的范围。
ex:
var outsideVariable; // You can store the data in here for later if you need to
$.ajax({
url: '@Url.Action("Create", "Package")',
type: 'GET',
data: { id: workflowId }
}).fail(function (data) {
// Fail handler
}).done(function (data) {
// Success, Do Something
YourFunctionThatProcessesData(data);
// Or store the data into a variable that has outside scope
outsideVariable = data;
}).always(function () {
//Do this no matter what
});
function YourFunctionThatProcessesData(data)
{
// do stuff with the data
}
至少我修复了它,我不需要ajax call,而是我只是使用了:
$("#btnCreatePackage").click(function() {
var workflowId = $("#workflowId")[0].value;
window.location.href = '@Url.Action("Create", "package")/' + workflowId;
});
可能很简单........