Ajax не может отправить идентификатор формы контроллеру MVC

У меня небольшая проблема с AJAX. Итак, сначала я покажу вам свои действия.

Форма:

<form id="QuestionForm">
    @Html.TextBoxFor(model => model.Body, new { @class = "form-control", @placeholder = "Body" }) 
    @Html.TextBoxFor(model => model.Text, new { @class = "form-control", @placeholder = "Text" })
</form>

Вот мой скрипт и код ajax:

$("#btnSubmit").click(function () {
    var data = $('#QuestionForm').serialize();

    $.ajax({
        type: "POST",
        url: "/Survey/AddQuestion",
        data: {data, @Model.Survey.Id},
        success: function () {
            $("#AddQuestion").modal("hide");
            //alert("Survey Added");
            location.reload();
        }
    })

})

Вот мое действие контроллера:

public JsonResult AddQuestion(SurveyQuestion model, int id) 
{  
    SurveyQuestion question = new SurveyQuestion();
    question.Body = model.Body;
    question.CreatedOn = DateTime.Now;
    question.ModifiedOn = DateTime.Now;
    question.Priority = 0;
    question.SurveyId = id;
    question.Text = model.Text;
    question.Type = QuestionType.Text;

    _db.SurveyQuestions.Add(question);
    _db.SaveChanges();
    return Json(question, JsonRequestBehavior.AllowGet);
}

Я не заполнил каждую часть кода, некоторые из них жестко запрограммированы, потому что я собираюсь выполнить действия позже. Но проблема в отправке двух вещей. Если я не отправляю Id и не удаляю Id из контроллера, он хорошо отправляет сериализованную модель, но если я отправляю их обоих, он получает Id, но не отправляет ему модель (текст и тело ноль). Как это исправить?

4 ответа

Решение

Вы можете сделать это, как показано ниже:

$("#btnSubmit").click(function() {

    $.ajax({
        type: "POST",
        url: "/Survey/AddQuestion",
        // Add id like query string parameter like below
        data: $('#QuestionForm').serialize() + '&id=' + @Model.Survey.Id,
        success: function() {
            $("#AddQuestion").modal("hide");
            //alert("Survey Added");
            location.reload();
        }
    })
})

Передать идентификатор в качестве параметра строки запроса

$("#btnSubmit").click(function () {
  var data = $('#QuestionForm').serialize();

  $.ajax({
    type: "POST",
    url: "/Survey/AddQuestion?id=" + '@Model.Survey.Id',
    data: {data, @Model.Survey.Id},
    success: function () {
        $("#AddQuestion").modal("hide");
        //alert("Survey Added");
        location.reload();
    }
})
})

В контроллере используйте атрибут FromUri перед параметром

public JsonResult AddQuestion(SurveyQuestion model,[FromUri]int id)
{

    SurveyQuestion question = new SurveyQuestion();
    question.Body = model.Body;
    question.CreatedOn = DateTime.Now;
    question.ModifiedOn = DateTime.Now;
    question.Priority = 0;
    question.SurveyId = id;
    question.Text = model.Text;
    question.Type = QuestionType.Text;

    _db.SurveyQuestions.Add(question);
    _db.SaveChanges();
    return Json(question, JsonRequestBehavior.AllowGet);
}

Попробуйте это, передав несколько параметров в сообщении, или вы можете передать, используя строку запроса, как показано в других ответах

$("#btnSubmit").click(function () {
    var data = $('#QuestionForm').serialize();

    $.ajax({
        type: "POST",
        url: "/Survey/AddQuestion",
        data: {model : data, id: @Model.Survey.Id},
        success: function () {
            $("#AddQuestion").modal("hide");
            //alert("Survey Added");
            location.reload();
        }
    })

})

контроллер

public ActionResult ActionName(SurveyQuestion model, int id)
{
   Your Code .......
}

Вы можете поставить идентификатор в URL

$("#btnSubmit").click(function () {
  var data = $('#QuestionForm').serialize();

  $.ajax({
    type: "POST",
    url: "/Survey/AddQuestion?id=@Model.Survey.Id",
    data: {data},
    success: function () {
        $("#AddQuestion").modal("hide");
        //alert("Survey Added");
        location.reload();
    }
  })

})
Другие вопросы по тегам