Как передать formcollection, используя ajax-вызов для действия?
Я пытаюсь заменить форму submit на вызов ajax. действие требует formcollection, и я не хочу создавать новую модель. Поэтому мне нужно передать всю форму (точно так же, как отправить форму), но через вызов ajax.
Я попытался сериализовать и использовать Json, но formcollection пуст.
это подпись моего действия:
public ActionResult CompleteRegisteration(FormCollection formCollection)
и нажмите кнопку "Отправить":
var form = $("#onlineform").serialize();
$.ajax({
url: "/Register/CompleteRegisteration",
datatype: 'json',
data: JSON.stringify(form),
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.result == "Error") {
alert(data.message);
}
}
});
теперь как я могу передать данные в formcollection?
Ответы
Ответ 1
Так как FormCollection
- это число пар ключ-значение, JSON является неприемлемым форматом данных для его представления. Вы должны использовать только сериализованную строку формы:
var form = $("#onlineform").serialize();
$.ajax({
type: 'POST',
url: "/Register/CompleteRegisteration",
data: form,
dataType: 'json',
success: function (data) {
if (data.result == "Error") {
alert(data.message);
}
}
});
Основные изменения:
- тип запроса, установленного на POST (здесь не обязательно, но кажется более естественным)
- Сериализованная форма вместо строки JSON в качестве запроса данных
- contentType удален - мы больше не отправляем JSON
Ответ 2
Try:
$(<your form>).on('submit',function(){
$.ajax({
url: "/Register/CompleteRegisteration" + $(this).serialize(),
// place the serialized inputs in the ajax call
datatype: 'json',
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data.result == "Error") {
alert(data.message);
}
}
});
});
Ответ 3
Если кто-то хочет добавить дополнительные данные в FormCollection, вы можете попробовать ниже.
<script type="text/javascript">
function SubmitInfo()
{
var id = $("#txtid").val();
var formData = $('#yourformname').serializeObject();
$.extend(formData, { 'User': id }); //Send Additional data
$.ajax({
url: 'Controlle/GetUser',
cache: false,
type: 'POST',
dataType: 'json',
data: decodeURIComponent($.param(formData)),
success: function (data) {
$('#resultarea').html(data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
}
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
<script/>
Метод действий
public ActionResult GetUser(FormCollection frm)
{
int UserId = Convert.ToInt32(frm["user"]);
// your code
return Json(data, JsonRequestBehavior.AllowGet);
}
Подробнее см. ссылку.
http://geekswithblogs.net/rgupta/archive/2014/06/25/combining-jquery-form-serialize-and-json.stringify-when-doing-ajax-post.aspx