【问题标题】:Ajax Post object is always nullAjax Post 对象始终为空
【发布时间】:2014-08-19 18:33:46
【问题描述】:

我有一个包含多个控件的表单。当用户选择一个州时,我正在向服务器发布一个帖子以获取学校列表。发布后,我丢失了表单中输入的值。我决定获取这些值并将它们保存在会话变量中。我现在遇到的问题是我的函数有 6 个以上的参数。我想把它减少到最多3个。我正在序列化表单,但它没有将对象传递给我在服务器站点上的函数。对象始终为空。我在这里错过了什么?

JavaScript 函数:

@model StudentBookTrade.Models.Book

@{
    ViewBag.Title = "AddBook";
    Layout = "~/Views/Shared/_RegularLayout.cshtml";
}

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
      //  document.getElementById('BookDescription-value').style.display = 'block';
        $('#BookDescription-value').css('display', '');
        $('#BookDescription').css('display', '');
        $('.t-input').css('display', '');
        $('.t-editor-button').css('display', '');
        $('.t-widget t-editor t-header').css('display', '');
        var SelectedState = $('#StateID').val();
        var SelectedSchool = $('#Name').val();
        var SelectedDepartment = $('#DepartmentName').val();
    });

    function changeState() {
        var SelectedState = $('#StateID').val();
        TestAddBook();
    }

function TestAddBook() {
  /*
  Passing all the variables as shown below will work, but I will like to receive the object instead.
   var bookName = $('#BookName').val();
   var authorName = $('#Author').val();
   var ISBNNumber = $('#ISNBNumer').val();
   var description = $('#BookDescription-value').val();
    var SelectedState = state;
    var SelectedSchool = school;
    var SelectedDepartment = department;

  */
        var myData = $('#form1').serialize();
        alert(myData);
            $.ajax({
                url: '@Url.Action("TestAddBook", "StudentBookTrade")',
                type: 'POST',
                datatype: 'JSON',
                data: { myData: myData }, 
                cache: false,
                // contentType: 'application;text;charset=UTF-8',
                success: function (e) {
                    window.location.href = window.location.href;
                },
                error: function (e) {
                    alert('error');
                }
            });
    }

</script>

形式:

@using (Html.BeginForm("AddBook", "StudentBookTrade", FormMethod.Post, new {id = "form1" }))
{
     @Html.ValidationSummary(true)
    <table style="width:100%;padding:30px 0 0 10px;">
        <tr>
                <td  style="text-align:center"> 
                    <table style="width:75%;padding: 0 0 10px 0;">
                        <tr>
                            <td style="text-align:center">
                               <div class="title"> Add Books </div>
                            </td>
                        </tr>
                    </table>
                </td>
         </tr>
        <tr>
            <td id="leftAlign" style="padding: 10px 0 0 0;">
                @Html.LabelFor(model => model.BookName, "Book Name:")
                <br/>
               @Html.EditorFor(model => model.BookName)
               @Html.ValidationMessageFor(model => model.BookName)
            </td>
        </tr>
         <tr>
            <td id="leftAlign" style="padding: 10px 0 0 0;">
                @Html.LabelFor(model => model.Author, "Author's Name:")
                <br/>
               @Html.EditorFor(model => model.Author)
               @Html.ValidationMessageFor(model => model.Author)
            </td>
        </tr>
         <tr>
            <td id="leftAlign" style="padding: 10px 0 0 0;">
                @Html.LabelFor(model => model.ISNBNumer, "ISBN Number:")
                <br/>
               @Html.EditorFor(model => model.ISNBNumer)
               @Html.ValidationMessageFor(model => model.ISNBNumer)
            </td>
        </tr>
        <tr>
            <td>
               @* @Html.EditorFor(model => model.BookDescription)*@
                <strong> @Html.LabelFor(model => model.BookDescription, "Description:") </strong>
                <br />
               @(Html.Telerik().EditorFor(model => model.BookDescription)
                    .Encode(true)
                    .HtmlAttributes(new { style = "height:310px;", id = "BookDescription" })
                    .Tools(tools => tools
                        .Clear()
                        .Bold().Italic().Underline().Strikethrough().Subscript().Superscript().Separator()
                        .FontName().FontSize()
                        .FontColor().BackColor().Separator()
                        .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull().Separator()
                        .InsertUnorderedList().InsertOrderedList().Separator()
                        .Indent().Outdent().Separator()
                        )
                )

                @Html.ValidationMessageFor(model => model.BookDescription)
            </td>
        </tr>
        <tr>
            <td id="leftAlign" style="padding: 10px 0 0 0;">
                @Html.Label("Select a State: ") 
                <br />
                @Html.DropDownList("StateID", null, "Choose State", new { onchange = "changeState()" })
            </td>
        </tr>
        <tr>
            <td id="leftAlign" style="padding: 10px 0 0 0;">
                @Html.LabelFor(model => model.SchoolID, "Select School:")
                <br/>
               @*@Html.EditorFor(model => model.SchoolName)*@
               @Html.DropDownList("Name", null, "Choose School", new { onchange = "changeSchool()" })
               @Html.ValidationMessageFor(model => model.SchoolID)
            </td>
        </tr>
        <tr>
            <td id="leftAlign">
                @Html.LabelFor(model => model.DepartmentID, "Select Department:")
                <br />
                 @Html.DropDownList("DepartmentName", null, "Choose Department", new { onchange = "changeDepartment()" })
                @Html.ValidationMessageFor(model => model.DepartmentID)

            </td>
        </tr>
        <tr>
            <td id="rightAlign" style="padding:0 0 5px 0;">
                <table style="width:75%;">
                    <tr>
                        <td style="text-align:center; padding:5px;">
                            <input type="submit" value="Add" class="t-button t-state-default" />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
}

我的方法签名:

    [HttpPost]
    public JsonResult TestAddBook(Book mydata) 
    {
        return Json(new { ok=true });
    }

【问题讨论】:

  • 这一行末尾的句号是故意的吗? data: { myData: myData }, .
  • .最后是一个错误。我删除了它。
  • 试试data: $('#form1').serialize(),
  • @AaronLS,它解决了我的问题。我现在得到对象。我把它改成了 data: { data: $('#form1').serialize() }.
  • 我注意到在表单中输入的所有值都是空的。我在 Ajax 调用中添加了 contentType: 'application/json;charset=UTF-8' 。现在,我收到内部错误 500。

标签: asp.net asp.net-mvc-3 asp.net-ajax


【解决方案1】:

尝试改变:

           var myData = $('#form1').serializeArray();   
            $.ajax({
                url: '@Url.Action("TestAddBook", "StudentBookTrade")',
                type: 'POST',
                datatype: 'JSON',
                data:  { myData:  JSON.stringify(myData)}, 
                cache: false,
                // contentType: 'application;text;charset=UTF-8',
                success: function (e) {
                    window.location.href = window.location.href;
                },
                error: function (e) {
                    alert('error');
                }
            });
    }

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 2014-11-05
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多