通过AJAX调用ASP.NET MVC-VIEW不起作用



我试图用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;
    });

可能很简单........

最新更新