我正在尝试使用ajax-Call调用视图,并将ID传递给Controller方法。 Id已传递,一切正常,直到我在return-Statement中调用视图为止。什么都没发生。
$("#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);
}
奇怪的是,如果我通过@ 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);
}
在这两种情况下,调用Controller方法均无错误地进行到最后,在第一种情况下什么都没有发生,在第二种情况下一切都很好。
任何人有什么想法??????
谢谢丹尼尔
答案 0 :(得分:0)
您无法通过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
}
答案 1 :(得分:0)
至少我修复了它,不需要ajax-Call,而是使用了它:
$("#btnCreatePackage").click(function() {
var workflowId = $("#workflowId")[0].value;
window.location.href = '@Url.Action("Create", "package")/' + workflowId;
});
就这么简单........