【问题标题】:Passing custom success/error messages to ajax call from asp.net controller从 asp.net 控制器将自定义成功/错误消息传递给 ajax 调用
【发布时间】:2018-06-18 18:52:31
【问题描述】:

我正在使用 ASP.Net Core,我正在尝试将所有内容本地化。我没有从控制器或视图中本地化字符串的问题,但我确实有来自 javascript 的 ajax 调用,该调用当前具有硬编码的英语成功/错误消息。我最初的想法是我可以将本地化的成功/错误消息从控制器传递回 ajax 调用。我认为使用 ajax 成功函数会很容易,但我不确定如何将错误消息传递给错误/失败函数。

这是我的 ajax 调用:

$.ajax({
 type: "POST",
 url: '@Url.Action("SaveGridState", "Account", new { gridID = 3 })',
 data: {
   options: JSON.stringify(gridState)
 },
 async: true,
 success: function(data) {
   var staticNotification = $("#staticNotification").data("kendoNotification");

   staticNotification.show({
     message: "Grid State Saved"
   }, "success");

   var container = $(staticNotification.options.appendTo);
   container.scrollTop(container[0].scrollHeight);
 },
 fail: function() {
   var staticNotification = $("#staticNotification").data("kendoNotification");
    staticNotification.show({
     message: "Grid State Save Failed"
    }, "error");

   var container = $(staticNotification.options.appendTo);
   container.scrollTop(container[0].scrollHeight);
 }
});

这是我的控制器的功能:

public bool SaveGridState(string options, int gridID)
    {
        try
        {
            UserStore ustore = new UserStore(_settings);
            HttpContext.Session.LoadAsync();
            uint user_id = (uint)HttpContext.Session.GetInt32("UserID");

            options = options.Replace("'", @"\'");

            return ustore.SaveGridState(user_id, gridID, options);
        }
        catch(Exception ex)
        {
            return false;
        }           
    }

有没有办法从 SaveGridState 函数定义我的成功/错误消息并将其传递给 ajax 函数?

【问题讨论】:

  • 在成功和错误的情况下调用SaveGridState会返回什么?
  • 你的控制器应该返回IActionResult,然后你可以返回Ok()或BadRequest()。
  • @AndreasHassing 现在如果状态被保存则返回 true,否则返回 false
  • @MarkG 所说的:return BadRequest(new { Result = false, Error=myError }); 类似的东西。

标签: c# ajax asp.net-core


【解决方案1】:

我最终接受了@MarkG 和@AndreasHassing 的建议,并更改了我的函数以返回一个 IActionResult,然后使用 Ok() 和 BadRequest()。

这是我的控制器功能现在的样子:

public IActionResult SaveGridState(string options, int gridID)
    {
        try
        {
            UserStore ustore = new UserStore(_settings);
            HttpContext.Session.LoadAsync();
            uint user_id = (uint)HttpContext.Session.GetInt32("UserID");

            options = options.Replace("'", @"\'");

            bool success = ustore.SaveGridState(user_id, gridID, options);

            return Ok(new { Result = success, Message = success ? _localizer["GridSaveSuccess"].Value : _localizer["GridSaveFail"].Value });
        }
        catch (Exception ex)
        {
            return BadRequest(new { Result = false, Message = _localizer["GridSaveFail"].Value });
        }
    }

我的 ajax 调用如下所示:

$.ajax({
            type: "POST",
            url: '@Url.Action("SaveGridState", "Account", new { gridID = 3 })',
            data: { options: JSON.stringify(gridState) },
            async: true,
            success: function (data) {
                var staticNotification = $("#staticNotification").data("kendoNotification");

                if (data.Result) {
                    staticNotification.show({
                        message: data.Message
                    }, "success");
                }
                else {
                    staticNotification.show({
                        message: data.Message
                    }, "error");
                }                    

                var container = $(staticNotification.options.appendTo);
                container.scrollTop(container[0].scrollHeight);
            },
            error: function (data) {
                var staticNotification = $("#staticNotification").data("kendoNotification");
                staticNotification.show({
                    message: data.Message
                }, "error");

                var container = $(staticNotification.options.appendTo);
                container.scrollTop(container[0].scrollHeight);
            }
       });

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2020-01-03
    • 1970-01-01
    • 2015-08-27
    • 2017-02-24
    • 1970-01-01
    • 2010-09-24
    • 2013-02-19
    • 2015-12-30
    相关资源
    最近更新 更多