在ajax中向控制器发送表单
这是我的表格在ajax中向控制器发送表单,ajax,asp.net-mvc,asp.net-mvc-3,jquery,Ajax,Asp.net Mvc,Asp.net Mvc 3,Jquery,这是我的表格 <form id="postProblemForm" action="/Problems/Post" method="post" enctype="multipart/form-data"> <input type="text" id="problemSubject" name="problemSubject" class="inp-form"/> <input type="file" id="uplo
<form id="postProblemForm" action="/Problems/Post" method="post" enctype="multipart/form-data">
<input type="text" id="problemSubject" name="problemSubject" class="inp-form"/>
<input type="file" id="uploadFile" name="uploadFile"/>
<textarea rows="" cols="" class="form-textarea" id="problemDescription" name="problemDescription"></textarea>
<input type="submit" value="Post" id="btnPostProblem" style="width:70px;"/>
</form>
以下是控制器代码
[HttpPost]
public bool Post(FormCollection form)
{
string subject = form["problemSubject"];
string description = form["problemDescription"];
var image = WebImage.GetImageFromRequest();
return true;
}
但未调用控制器方法。请参阅帮助。您正在接受
POST
请求的控制器方法上执行GET
。您需要将其更改为:
$.post(url,dataToSend,callBack);
不能使用AJAX上载文件。我看到您的表单包含一个文件输入,但这不适用于AJAX。此外,您正在使用
$。获取,而您可能希望$。发布内容。操作的另一个问题是它应该返回ActionResult,而不是布尔类型。例如,您可以为tat问题返回一个JsonResult
如果您希望能够使用表单上载文件,可以使用客户端上载插件,如或
下面是使用jQuery.form插件时代码的示例:
$('#postProblemForm').ajaxForm(function(isPosted) {
if (isPosted) {
alert('posted successfully');
}
});
好的,很好。但我需要客户端验证,然后必须将表单发送给控制器。应该做什么?客户端验证与AJAX完全无关。这是两个不同的概念。您可以很好地启用客户端验证,并且仍然将表单作为常规表单提交。例如,假设您希望problemSubject
字段为必填字段。只需使用[Required]
属性修饰视图模型的属性,然后使用助手生成字段,而不是像您那样硬编码:@Html.EditorFor(x=>x.ProblemSubject)
。然后包括相应的验证占位符:@Html.ValidationMessageFor(x=>x.ProblemSubject)
。。。。最后包括jquery.validate.js
和jquery.validate.unobtrusive.js
脚本。
$('#postProblemForm').ajaxForm(function(isPosted) {
if (isPosted) {
alert('posted successfully');
}
});