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();
}
})
})