1

我想在当前视图上使用 ajax 调用来调用视图。以下是我的 Ajax 调用,它调用了我的控制器的一个函数。

$.ajax({
        type: 'POST',
        url: '@Url.Action("EditCertificateObservation", "Frühwarnsystem")',
        data: {
            serverName: '@Model[0].ServerName',
            name: event.data.name,
            thumbprint: event.data.thumbprint,

            expiringDateStr: event.data.expiringDate,
            isChecked: document.getElementById(store + event.data.index).checked,
            model: data,
        },
    });

这段代码是我的控制器函数,它返回要加载的视图。

[HttpPost]
public ActionResult EditCertificateObservation(string serverName, string name, string thumbprint, string expiringDateStr, bool isChecked, string model)
{
    var newModel = JsonConvert.DeserializeObject<List<Store>>(model);

    var cert = new Certificate(serverName, name, thumbprint, expiringDateStr);
    var server = new Server(serverName);
    server.FetchIdByServerName();

    if (isChecked)
    {
        cert.AddToObservation(server.Id);
    }
    else
    {
        cert.DeleteFromObservation();
    }

    return View("Index");
}

为您了解:我在视图上使用复选框调用 ajax 调用,该复选框是动态生成的。如果我调试控制器函数被调用并运行但浏览器不加载我返回的视图。

如果您需要更多信息,请在此处询问。

谢谢您的帮助

4

2 回答 2

1

如果你想在 Ajax 请求之后打开一个视图,而不是只需要等待控制器的响应,那么你可以使用success,但你也可以使用failureerror取决于你的需要,所以你的 Ajax 将是这样的:

$.ajax({
    type: 'POST',
    url: '@Url.Action("EditCertificateObservation", "Frühwarnsystem")',
    data: {
        serverName: '@Model[0].ServerName',
        name: event.data.name,
        thumbprint: event.data.thumbprint,

        expiringDateStr: event.data.expiringDate,
        isChecked: document.getElementById(store + event.data.index).checked,
        model: data,
    },
        success: function (response) { 
        alert(response.message); 
        window.location.href = "/Frühwarnsystem/Index";

        // or with some parameter
        window.location.href ="/Frühwarnsystem/Index?id=" + response.counter;

        // or if you prefer with helper ...
        window.location.href = '@Url.Action("Frühwarnsystem","Index")';
        
        },
        failure: function (response) { alert("failure"); },
        error: function (response) { alert("error"); }
});

为了更有用一点,您的控制器可以发送带有一些参数的Json 响应,例如,如下所示:

[HttpPost]
public JsonResult EditCertificateObservation(string serverName, string name, string thumbprint, string expiringDateStr, bool isChecked, string model)
{
    var newModel = JsonConvert.DeserializeObject<List<Store>>(model);

    var cert = new Certificate(serverName, name, thumbprint, expiringDateStr);
    var server = new Server(serverName);
    server.FetchIdByServerName();

    if (isChecked)
    {
        cert.AddToObservation(server.Id);
    }
    else
    {
        cert.DeleteFromObservation();
    }
    // Do some condition here to send an answer ...
    string message = "";
    int counter = 0;
    var response = new { counter, message };
    return Json(response);
}
于 2021-01-22T07:49:29.100 回答
1

您正在调用 ajax POST HTTP 请求。这意味着您可以下载调用结果并将其分配给 javascript 变量。此结果不会作为页面显示在浏览器中。看看$.post 这里的例子。

于 2021-01-21T16:24:32.247 回答