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

时间:2019-02-14 15:28:18

标签: javascript jquery ajax asp.net-mvc

我正在尝试使用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方法均无错误地进行到最后,在第一种情况下什么都没有发生,在第二种情况下一切都很好。

任何人有什么想法??????

谢谢丹尼尔

2 个答案:

答案 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;
    });

就这么简单........