通过ajax调用ASP.NET MVC视图不起作用

问题描述 投票:0回答:2

我试图用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方法,直到最后没有错误,在第一种情况下没有任何反应,在第二种情况下一切都很好。

任何人的想法??????

谢谢,丹尼尔

javascript jquery ajax asp.net-mvc
2个回答
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
}

0
投票

至少我修复了它,我不需要ajax-Call,而是我刚用过的:

   $("#btnCreatePackage").click(function() {
        var workflowId = $("#workflowId")[0].value;

        window.location.href = '@Url.Action("Create", "package")/' + workflowId;
    });

它可以那么简单........

© www.soinside.com 2019 - 2024. All rights reserved.