簡體   English   中英

Asp.net MVC 4 Ajax發布請求不起作用,我不知道為什么

[英]Asp.net MVC 4 Ajax post request not working and I can't figure out why

我正在使用ASP.net MVC 4應用程序,在其中一個頁面中,我有一種形式,可以迭代所有輸入並將其轉換為json數據。

使用提琴手,chrome開發工具和firebug,我已經驗證了數據已正確轉換為json。 我正在使用$ ajax將數據發布到mvc控制器,每次我得到一個錯誤。

我似乎無法弄清楚為什么它不起作用。 我敢打賭,如果我能弄清楚如何得到錯誤消息,就可以弄清楚如何使它正常工作。 當我嘗試在控制台中查看時,沒有看到錯誤消息。 我嘗試將錯誤消息記錄到控制台,但未顯示任何內容。

如果有人可以幫助我弄清楚如何獲取錯誤消息,我將不勝感激。 我還發布了代碼,以防丟失明顯的東西。

這是我的JavaScript代碼:

$(function () {

$("#saveform").submit(function () {
    var myRows = [];
    var $headers = $("th");
    var $rows = $("tbody tr").each(function (i, n) {
        var $row = $(n);
        myRows.push({
            id: $row.find('#item_SpecimenId').val(),
            site: $row.find('#item_Site').val(),
            clinicalImpression: $row.find('#item_ClinicalImpression').val(),
            degreeOfSuspicion: $row.find('#item_DegreeOfSuspicion').val(),
            margins: $row.find('#item_Margins :selected').text(),
            count: $row.find('#item_Count').val(),
            lesionSize: $row.find('#item_LesionSize').val(),
        });

    });
    var specimens = JSON.stringify(myRows);
    var url = '/PathSlip/DoctorSlip';
    $.ajax({
        url: url,
        data: '{ id:1, post:2 }',
        type: 'POST',
        dataType: 'json',
        statusCode: {
            404: function () {
                $("#response").html('Could not contact server.');
            },
            500: function () {
                $("#response").html('A server-side error has occurred.');
            }
        },
        success: function () {
            $("#response").html('success');
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $("#response").html('an error');
        }
    });

});
});

這是我在控制器中使用的viewModel

public class SpecimenViewModel
{

    public int id { get; set; }
    public string site { get; set; }
    public string clinicalImpression { get; set; }
    public string degreeOfSuspicion { get; set; }
    public string margins { get; set; }
    public string count { get; set; }
    public string lesionSize { get; set; }
}

這是我的MVC控制器

    public ActionResult DoctorSlip(int id)
    {
        var specimens = _repo.GetSpecimensByBiopsyId(id).ToList();
        return View(specimens);
    }


    [HttpPost]
    public ActionResult DoctorSlip(IEnumerable<SpecimenViewModel> specimens)
    {
        return RedirectToAction("DoctorSlip");
    }

任何幫助,我們將不勝感激。

當我使用$.post而不是$.ajax它可以工作,但是我不知道為什么。

我認為您的代碼中有一個問題:

您在“數據”(即“ id,post”)中傳遞單個字段,而您的操作方法則需要SpecimenViewModel對象的列表。 您應該改為傳遞specimens對象。

首先,嘗試發送正確的數據,如果問題仍然存在,只需更改POST方法的return this.View();即可return this.View(); 而不是return RedirectToAction("DoctorSlip");

我准備了與您的代碼稍有不同的版本,您可以嘗試:

@using (Html.BeginForm("DoctorSlip","Test",FormMethod.Post,new {id="saveform"}))
{
    <!-- your other input controls -->
    <input type="button" id="submitForm" value="Save"/>
}

劇本:

<script>
    $(function() {

        $("#submitForm").click(function () {
            var myRows = [];
                myRows.push({
                    id: 1,
                    site: "abc",
                    clinicalImpression: "aa",
                    degreeOfSuspicion: "test",
                    margins: "24",
                    count: "12",
                    lesionSize: "33",
                });

                myRows.push({
                    id: 2,
                    site: "abc2",
                    clinicalImpression: "aa3",
                    degreeOfSuspicion: "test2",
                    margins: "24",
                    count: "12",
                    lesionSize: "33",
                });

            var specimens = JSON.stringify(myRows);
            var url = '/Test/DoctorSlip';
            $.ajax({
                url: url,
                data: specimens,
                type: 'POST',
                dataType: 'json',
                statusCode: {
                    404: function() {
                        alert('Could not contact server.');
                    },
                    500: function() {
                        alert('A server-side error has occurred.');
                    }
                },
                success: function() {
                    alert('success');
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert('an error' + thrownError);
                }
            });

        });
    });
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM