0

这是我的表格

<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>

以下是JS

$("#postProblemForm").submit(function (event) {
                event.preventDefault();
                var $this = $(this);
                var url = $this.attr('action');
                var dataToSend = $this.serialize();
                var callBack = function (isPosted) {
                                    if (isPosted) { alert("posted successfully"); } }
                $.get(url,dataToSend,callBack);

            });

以下是控制器代码

[HttpPost]
        public bool Post(FormCollection form) 
        {
            string subject = form["problemSubject"];
            string description = form["problemDescription"];
            var image = WebImage.GetImageFromRequest();

            return true;

        }

但是控制器方法没有被调用。请帮忙。

4

2 回答 2

2

您不能使用 AJAX 上传文件。我看到您的表单包含文件输入,但这不适用于 AJAX。此外,您正在使用$.get您可能想要$.post的内容。您的操作的另一个问题是它应该返回一个 ActionResult 而不是布尔类型。例如,您可以返回一个 JsonResult 来解决问题。

如果您希望能够使用表单上传文件,您可以使用客户端上传插件,例如Uploadify,Fine UploaderjQuery.form plugin.

例如,使用 jQuery.form 插件时您的代码可能看起来如何:

$('#postProblemForm').ajaxForm(function(isPosted) {
    if (isPosted) { 
        alert('posted successfully');
    }
});
于 2013-04-23T06:23:49.177 回答
0

您正在执行一个GET接受POST请求的控制器方法。您需要将其更改为:

$.post(url,dataToSend,callBack);
于 2013-04-23T06:23:30.323 回答