我是MVC编程的新手,所以请原谅这个问题可能的愚蠢。
$(document).ready(function () {
$("#btnGenerate").click(function () {
$.ajax({
type: "GET",
url: '/Main/MyMethod',
data: JSON.stringify($('#searchForm').serializeArray()),
dataType: 'json',
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
})
return false;
});
});
而我在控制器中的方法。
[HttpGet]
public FileStreamResult MyMethod(MyModel r)
{
return null;
}
我确实得到500内部服务器错误。
试试使用 serialize()
而不是 serializeArray()
$.ajax({
type: "GET",
url: '/Main/MyMethod',
data: JSON.stringify($('#searchForm').serialize()),
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
})
你也可以尝试将方法属性改为 HttpPost
:
[HttpPost]
public FileStreamResult MyMethod(MyModel r)
{
return null;
}
如果你在做岗位。
$.ajax({
type: "POST",
url: '/Main/MyMethod',
data: {
//your MyModel properties e.g. name
name: "MyName",
age: 1
},
success: function(data){
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
})
如果serialize不行,也可以试试这种方法。
$("#my_form").submit(function(event){
event.preventDefault(); //prevent default action
var post_url = $(this).attr("action"); //get form action url
var request_method = $(this).attr("method"); //get form GET/POST method
var form_data = $(this).serialize(); //Encode form elements for submission
`$.ajax({
url : post_url,
type: request_method,
data : form_data
}).done(function(response){ //
$("#server-results").html(response);
});
})`
$(function(){
$("#_frmId").submit(function(){
event.preventDefault(); // Prevent the default behaviour of the form.
var formdata = $("#_frmId").serialize(); // Serializes the form
$.ajax({
url: '@Url.Action("// Method", "// Controller")',
type:'POST',
data: formdata,
success: function(result){
// Do whatever
}
});
});
})
_frmId
表单的ID。
当表单被提交时,它将调用这个方法。
另外,没有必要对传递给控制器的数据进行字符串化,因为你是在序列化它。
你传递给控制器的是View的模型而不是表单模型。
所以你的控制器动作应该是这样的
public FileStreamResult MyMethod(//<The View model> r)
最后,你是在向控制者发布数据,所以请删除 [HttpGet]