jquery - ASP MVC JsonResult 呈现为页面,而不是通过调用 jQuery 函数捕获

标签 jquery json asp.net-mvc-3 spark-view-engine

我在从要在 jQuery 中处理的 ASP MVC Controller 方法获取 JSON 响应时遇到了一些问题 - 我之前已经尝试过没有问题 - 但这次我显然做错了一些事情,我可以不明白什么...

我有一个从 ASP MVC 3 渲染的 Spark View ,调用返回 JsonResult 的 Controller 方法。目前我已将其简化为仅显示成功或失败消息,直到它真正发挥作用。我可以在调试中通过两个路径跟踪该方法,并且创建的 JSON 对象看起来是正确的。

[HttpPost]
public JsonResult AdjustmentDetail(AdjustmentPaymentModel adjustment)
{
    try
    {
        //do some other processing
        return Json(new {success = true}, "application/json");
    }
    catch(Exception e)
    {
        return Json(new { success = false, message = e.Message });
    }
}

从 Spark View 调用 Controller 方法,使用 jQuery 提交表单并捕获结果,以向用户返回一些反馈,然后从那时起为他们提供一些选择。目前,它只是设置为弹出警报,以便我可以看到它接收 JSON 并执行回调函数。同样,为了可读性,表单上的一些输入已被删除(一个纯文本框和两个带有 jQ​​uery 日期选择器的文本框似乎运行正常 - 因此 javascript 中的日期选择器函数,我将其保留,以防它们可能会被删除。干扰)。

<script>
  $(document).ready(function () {
    $(".datepicker").attr('readOnly', 'true');
  });

  $(function () {
    $('.datepicker').datepicker({
      maxDate: 0,
      dateFormat: 'dd/mm/yy'
    });
  });

  $('document').ready(function () {
    $('#submit-adjustment').submit(function () {
      $('#mini-loader').show();

      $.post('${Url.Action("AdjustmentDetail", "payments")}', { adjustment: Model }, function (d) {
        alert(d);
        $('#mini-loader').hide();
      }, 'json');

      return false;
    });
  });
</script>

<form action='' id='submit-adjustment' method='post'>
  <label for="Notes">
    Notes
    <small>
      <span class="error">${Html.ValidationMessageFor(m => m.Notes)}</span>
    </small>
  </label>

  ${Html.EditorFor(m => m.Notes)}

  ${Html.HiddenFor(m => m.BankAccount)}
  ${Html.HiddenFor(m => m.IsCreditAdjustment)}

  <div style="padding-top:10px;">
    <input class="button big" name="submit-adjustment" type="submit" value="Submit Adjustment" />
    <img src="/Content/Images/mini-loader.gif" id="mini-loader" style="display: none;"/>
  </div>
</form>

在过去,上面的方法是有效的 - 表单发布,然后由 jQuery 回调函数处理生成的 JSON。然而在这种情况下(无论 Controller 方法成功完成还是抛出异常),JSON 都会在浏览器中呈现:

{"success":true}

当在 Chrome 中执行 Javascript 时,该函数要么没有被调用,要么 JSON 渲染在有机会执行此操作之前正在更改页面。我已经使用 Fiddler 检查了调用,帖子的响应为 200,内容类型为:application/x-www-form-urlencoded

我已经在谷歌上搜索了一段时间,我要么无法在谷歌查询中表达问题,要么我只是在这里错过了一些非常简单的东西!非常感谢任何帮助 - 如果我需要提供更多详细信息,请告诉我。

最佳答案

将提交按钮更改为常规按钮

<input id="Button1" type="button" value="Test" class="btn btn-primary">

并添加要提交的jquery。

<script language="javascript" type="text/javascript">
$(document).ready(function () {


    $('#Button1').click(function () {
        alert('here');
        $('#addCustomerForm').submit();
        return false;
    });

});

关于jquery - ASP MVC JsonResult 呈现为页面,而不是通过调用 jQuery 函数捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711315/

相关文章:

javascript - 如何使用 Web API 将 C# DateTime 序列化为 Javascript Date

c# - 用jquery ajax和MVC3发布表单的正确方法是什么?

jquery - Bootstrap 轮播图像停止一秒钟

javascript - 满足条件后显示警报

javascript - 不带 www.domain.com/subpage 的 URL 会使每个标题链接开始事件

json - Swift json解析错误: Could not cast value of type NSCFConstantString to NSArray

jquery - 如何为 select2 中的每个选项设置不同的颜色?

python - 将嵌套字典中的 numpy 数组转换为列表,同时保留字典结构

asp.net-mvc - post 和 get 是否可以有重复的 Action 名称和参数列表?

asp.net-mvc - 输出nbsp;通过变量在 Razor ?