如何用Javascript扩展formdata并将其发送到控制器

How to extend formdata with Javascript and post it to the Controller

本文关键字:控制器 何用 Javascript 扩展 formdata      更新时间:2023-09-26

我如何用一个变量扩展Javascript中的formdata,以便在我的控制器POST操作中可用。

所以我想做的是,添加一个变量update(这是一个bool),并将此与我的formdata发送到控制器。

这是我的。js文件的代码&控制器代码

    bootbox.confirm("Are you sure you want to override this Quotation?", function (result) {
        if (result === null) {
           //do nothing
        } else if (result) {
           if (!$form[0].checkValidity()) {
               return false;
           }
           var btn = $('#saveQuotationForm');
           btn.attr('onclick', '');
           btn.attr('class', 'glyphicon glyphicon-floppy-save');
           btn.text('Saving...');
           var formurl = $form.attr('action');
           var formdata = $form.serialize();
           console.log(formurl + " =formurl");
           console.log(formdata + " =formdata");
           //tricky part, i want to do something like this:
           //var update = new boolean(false);
           //formdata.append(update, true); --> but this is obviously not the way to go :), anyone got idea's?**
           $.post(formurl, formdata, function (data) {
                if (data && data.State === 'success') {
                    btn.attr('class', 'glyphicon glyphicon-floppy-saved');
                    btn.text('Saved');
                    $('#placeholderAlert').append('<div class="alert alert-success" role="alert"><strong>Saved</strong> ' + data.Message + '</div>');
                } else {
                    btn.attr('class', 'glyphicon glyphicon-floppy-remove');
                    btn.text('Saving failed');
                }
          });
       }
  });


    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonNetResult Products_Quotation_Save(vmProducts_Quotation_Save quotation)
    {
        quotation.DateCreated = DateTime.Now;
        QuotationCache.Instance.SaveQuotation(GetClientCode(HttpContext), GetUserName(HttpContext), quotation, MuseContext);
        return JsonNet(new { State = "success", Message = "Quotation '" + quotation.Name + "' has been saved with reference " + quotation.ShortCode + ". <a href=" + Url.Action(RouteItemAction.ResaPlus_Quotations) + " class='"alert-link'">Go to overview</a>" });
    }
编辑:

这确实是另一个问题的重复,为此道歉。我通过这里提供的答案之一解决了这个问题:jquery表单。Serialize和其他参数

所以我创建了一个变量,并添加了$。参数,然后在我的控制器中我可以访问该参数。

var update = { 'update': true };
var formurl = $form.attr('action');
var formdata = $form.serialize() + '&' + $.param(update);
$.post(formurl, formdata, function (data) {
});
[HttpPost]
[ValidateAntiForgeryToken]
public JsonNetResult Products_Quotation_Save(vmProducts_Quotation_Save quotation, bool update)
{
}

您可以使用serializeArray()来创建一个可更新的对象。http://api.jquery.com/serializeArray/

var formdata = $form.serializeArray();
formdata.push({name: 'update', value: true});
$.post(formurl, formdata, function (data)