セットされたモデルオブジェクト全体をformdataを介して渡し、コントローラーでモデルタイプに変換するにはどうすればよいですか?
以下は私が試したものです!
JavaScriptパーツ:
model = {
EventFromDate: fromDate,
EventToDate: toDate,
ImageUrl: imgUrl,
HotNewsDesc: $("#txthtDescription").val().trim(),
};
formdata.append("model",model);
それをAJAXに渡すと、文字列になり、Request.Form["model"]
の値をチェックすると、結果は同じになります。つまり、文字列として受信され、値は"[object object]"
になります
フォームデータを介してモデルを渡し、コントローラーで受信する方法はありますか?
ビューがモデルに基づいており、<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を使用してフォームデータを送信する場合。これが送信方法です。
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) {
}
})
ビュー側では、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
}