【问题标题】:ASP net 4 send object from ajax nullexceptionReferenceASP net 4 从 ajax nullexceptionReference 发送对象
【发布时间】:2017-01-15 13:27:07
【问题描述】:

我尝试将表单中的对象发送到 HttpPost 方法(接收对象参数),但我总是得到 NullExceptionReferece,但如果我作为字符串传递,我不会收到错误消息。 我的控制器:

[HttpPost]
    //public ActionResult CheckVat(string vatnumber) {
    public ActionResult CheckVat(VatSearch vatnumber)
    {
        return Json(vatnumber);
    }

我的 ajax 函数:

<h3>Insert VAT number to check:</h3>
@model LatourretrVat.Models.VatSearch

<form id="form">
    <div class="row">
        <div class="col-sm-6">
            <div class="form-group">
                @Html.TextBoxFor(m => m.VatNumber,new { @class = "form-control", @id="VatNumber"})
                 @Html.ValidationMessageFor(model => model.VatNumber, "", new { @class = "text-danger" })
             </div>
        </div>
        <div class="col-sm-6">
             <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Check VAT" />
            </div>
        </div>
   </div>
</form>
<script >
    $(document).ready(function () {
        $('#form').submit(function () {
            var VatSearch = new Object();
            VatSearch.VatNumber = $("#VatNumber").val();
            $.ajax({
                url: '@Url.Action("CheckVat", "Home")',
                type: "POST",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                //data: JSON.stringify({
                //    VatNumber: $('#VatNumber').val(),
                //}),
                data: JSON.stringify(VatSearch),
                success: function (result) {
                    alert("success");
                },
                error: function (result) {
                    console.log(result);
                    alert("error");
                }
            });
          return false;
        });
    });
</script>

【问题讨论】:

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

如果你想在你的控制器中接收和反对,你可以像这样发送一个 JSON 对象:

    $('#form').submit(function () {
        var VatSearch = { "VatNumber" : $("#VatNumber").val() };
        $.ajax({
            url: '@Url.Action("CheckVat", "Home")',
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify(VatSearch),
            success: function (result) {
                alert("success");
            },
            error: function (result) {
                console.log(result);
                alert("error");
            }
        });
      return false;
    });

【讨论】:

    【解决方案2】:

    您的 HttpPost 操作方法参数的名称不应与参数类型的属性之一相同。

    目前您的用户vatnumber 作为参数类型,我假设您的视图模型也有一个名为VatNumber 的属性。

    这应该可行。

    [HttpPost]
    public ActionResult CheckVat(VatSearch data)
    {
       return Json(data);
    }
    

    此外,由于您从服务器显式发送 json 响应,因此无需将 dataType 指定为 "json"

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2021-03-30
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      相关资源
      最近更新 更多