原因及解决方法
在你的 AJAX 请求中,确保 Content-Type 正确设置为 application/x-www-form-urlencoded,因为你使用 serialize() 方法来序列化表单数据。
修改 AJAX 请求
确保你的 Content-Type 设置正确:
javascript
function postPartialView(act, ctl, data) {
var url = '/' + ctl + '/' + act;
console.log(url + ' ' + data);
$.ajax({
url: url,
data: data,
type: 'POST',
contentType: 'application/x-www-form-urlencoded; charset=UTF-8', // 设置正确的 Content-Type
success: function (result) {
$('#main').html(result);
},
error: function (xhr, status, error) {
console.error('Error loading partial view:', status, error);
}
});
}
// 示例数据对象
var data = {
funSn: 'B12F87CD-B17E-499E-91F1-DF1C9446B062',
funIsuse: true,
funSyssn: 'E0FFD7B3-8CF2-462B-A90F-6DB79849FAB4',
funUpsn: '',
funNo: 99,
funName: '99',
funLeavel: 1,
funPagename: '122',
__RequestVerificationToken: $('[name="__RequestVerificationToken"]').val()
};
postPartialView('Update', 'YourController', $.param(data)); // 使用 $.param(data) 序列化数据
确保表单的序列化正确
在你的 HTML 中,确保表单序列化正确:
html
<form id="updateForm" method="post">
@Html.AntiForgeryToken()
<input type="text" name="funSn" value="B12F87CD-B17E-499E-91F1-DF1C9446B062" />
<input type="checkbox" name="funIsuse" checked />
<input type="text" name="funSyssn" value="E0FFD7B3-8CF2-462B-A90F-6DB79849FAB4" />
<input type="text" name="funUpsn" value="" />
<input type="number" name="funNo" value="99" />
<input type="text" name="funName" value="99" />
<input type="number" name="funLeavel" value="1" />
<input type="text" name="funPagename" value="122" />
<button type="button" onclick="submitForm()">Submit</button>
</form>
<script>
function submitForm() {
var formData = $('#updateForm').serialize();
postPartialView('Update', 'YourController', formData);
}
</script>
后端控制器
确保控制器方法能够正确处理表单数据:
csharp
[HttpPost]
public async Task Update(EddFunction eddFun) {
VmdViewmodel vModel = new VmdViewmodel();
try {
if (!ModelState.IsValid) {
throw new Exception($"請確認填寫的資料無誤,然後再次儲存!");
}
// 日志调试
_cLog.WriteEventLog($"funSn: {eddFun.funSn}");
if (string.IsNullOrEmpty(eddFun.funSn)) {
// 处理逻辑
} else {
// 处理逻辑
}
} catch (Exception ex) {
vModel.error_message = "儲存失敗! 請確認填寫的資料.";
_cLog.WriteEventLog(ex);
return PartialView(vModel);
}
return RedirectToAction("Index", "Function");
}
总结
通过以上方法,确保你的 AJAX 请求头正确设置 Content-Type,并且表单数据序列化为 URL 编码格式发送到服务器。这样可以避免 415 错误,并确保服务器能够正确接收到数据。