如何将整个模型集附加到表单数据中,并在MVC中获得它

How to append whole set of model to formdata and obtain it in MVC

本文关键字:数据 并在 MVC 表单 模型      更新时间:2023-09-26

如何通过formdata传递一个完整的集合模型对象,并在控制器中将其转换为模型类型?

下面是我尝试过的!

JavaScript部分:

model = {
             EventFromDate: fromDate,
             EventToDate: toDate,
             ImageUrl: imgUrl,
             HotNewsDesc: $("#txthtDescription").val().trim(),
        };
formdata.append("model",model);

然后通过AJAX传递它,它将是一个字符串,如果我检查Request.Form["model"]的值,结果将是相同的,也就是说,它将作为字符串接收,值将是"[object object]"

有什么方法可以通过formdata传递模型并在控制器中接收它吗

如果您的视图基于模型,并且您已经在<form>标记中生成了控件,那么您可以使用将模型序列化为FormData

var formdata = new FormData($('form').get(0));

这也将包括使用<input type="file" name="myImage" .../> 生成的任何文件

并使用将其寄回

$.ajax({
  url: '@Url.Action("YourActionName", "YourControllerName")',
  type: 'POST',
  data: formdata,
  processData: false,
  contentType: false,         
});

和在你的控制器

[HttpPost]
public ActionResult YourActionName(YourModelType model)
{
}

或者(如果您的模型不包括HttpPostedFileBase的属性)

[HttpPost]
public ActionResult YourActionName(YourModelType model, HttpPostedFileBase myImage)
{
}

如果你想添加表单中没有的附加信息,那么你可以使用附加它

formdata.append('someProperty', 'SomeValue');

如果您想使用Ajax发送Form数据。这是发送的方法

var formData = new FormData();
//File Upload
   var totalFiles = document.getElementById("Iupload").files.length;

for (var i = 0; i < totalFiles; i++) {
    var file = document.getElementById("Iupload").files[i];
    formData.append("Document", file);
}
formData.append("NameCode", $('#SelecterID').val());
formData.append("AirLineCode", $('#SelecterID').val());

$.ajax({
        url: "/Controller/ActionName",
        type: "POST",
        dataType: "JSON",
        data: formData,
        contentType: false,
        processData: false,
        success: function (result) {
    }
})

使用纯Javascript,考虑到您有

<form id="FileUploadForm">
   <input id="textInput" type="text" />
  <input id="fileInput" type="file" name="fileInput" multiple>
  <input type="submit" value="Upload file" />
</form>

JS-

document.getElementById('FileUploadForm').onsubmit = function () {
var formdata = new FormData(); //FormData object
var fileInput = document.getElementById('fileInput');
//Iterating through each files selected in fileInput
for (i = 0; i < fileInput.files.length; i++) {
    //Appending each file to FormData object
    formdata.append(fileInput.files[i].name, fileInput.files[i]);
}
//text value
formdata.append("textvalue",document.getElementById("textInput").value);
//Creating an XMLHttpRequest and sending
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Home/UploadFiles');
xhr.send(formdata); // se
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4 && xhr.status == 200) {
        //on success alert response
        alert(xhr.responseText);
    }
  }
  return false;
}  

在你的C#控制器中,你可以得到如下的值

[HttpPost]
public ActionResult UploadFiles(YourModelType model, HttpPostedFileBase fileInput)
{
      //save data in db
}

参考:在MVC 中使用jQuery Ajax或Javascript上传文件

在视图端,如果您使用ajax,则

$('#button_Id').on('click', function(){
        var Datas=JSON.stringify($('form').serialize());
        $.ajax({
            type: "POST",
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            url: '@Url.Action("ActionName","ControllerName")',
            data:Datas,
            cache: false,
            dataType: 'JSON',
            async: true,
            success: function (data) {
            },
        });
    });

在控制器侧,

 [HttpPost]
 public ActionResult ActionName(ModelName modelObj)
 {
 //Some code here
 }