【问题标题】:Can't submit ajax form Internal error 500无法提交 ajax 表单内部错误 500
【发布时间】:2013-02-02 09:22:52
【问题描述】:

我有提交以下代码的问题。在 Firebug 上,我收到以下消息:

POST localhost:9706/Home/Upload 500 内部服务器错误

没有为此对象定义无参数构造函数。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情: System.MissingMethodException:没有为此对象定义无参数构造函数。

我可以提交这个表单,但没有 jquery 和 unobtrusive-ajax 脚本,在这种情况下提交看起来像普通提交(整个页面提交,没有 ajax)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<FileInfoModel>>"%> 

 <%@ Import Namespace="MembershipTest.Models"%> 
<script src="../../Scripts/jquery-1.7.1.js"
type="text/javascript"></script>  
<script src="../../Scripts/jquery.unobtrusive-ajax.js"type="text/javascript"</script>   
<script type="text/javascript">     
function OnSuccess(response) {
     alert(response);
 }
 function OnFailure(response) {
     alert("Whoops! That didn't go so well did it?");  
 }   </script>   
<% using (Ajax.BeginForm("Upload", "Home", null,
     new AjaxOptions
     {
         HttpMethod = "POST",
         UpdateTargetId = "uploadTable",
         InsertionMode = InsertionMode.Replace,
         OnSuccess = "OnSuccess",
         OnFailure = "OnFailure" 
     },
     new { enctype = "multipart/form-data" })){%>  
  <fieldset> 
  <legend> Upload File: </legend> <span>Filename:</span>
  <input type="file" name="file" id="file" /> 
  <input type="submit" value="Upload" /> 
  </fieldset> <% } %>  
  <div id="uploadTable"></div>

控制器代码

    [HttpGet]
    [ChildActionOnly]
    public ActionResult Upload()
    {

        List<FileInfoModel> FilesInfoData =  new List<FileInfoModel>();

        DirectoryInfo dir = new DirectoryInfo(Server.MapPath(uploadLocation));
        var files = from f in dir.GetFiles()
                    select f;
        foreach (var i in files)
        {
            FileInfoModel fmodel = new FileInfoModel(){
                Name = i.Name,
                Length = i.Length,
                LastWriteTime = i.LastWriteTime
            };
            FilesInfoData.Add(fmodel);
        }

        return PartialView("Upload",FilesInfoData);
    }
    [HttpPost]
    public ActionResult Upload(HttpPostedFileWrapper file)
    {

        if (file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            var saveLocation = Path.Combine(Server.MapPath(uploadLocation), fileName);
            file.SaveAs(saveLocation);
        }
        return RedirectToAction("Index");
    }

型号代码

public class FileInfoModel
{
    public FileInfoModel(){}
    public string Name { get; set; }
    public double Length { get; set; }
    public DateTime LastWriteTime { get; set; }       
}

【问题讨论】:

  • 嗯,很明显,这是一个服务器端错误。我认为您应该向我们展示该代码或自己调试。将正常提交的输入与 Ajax 请求的输入进行比较,看看有什么不同。然后找出您的脚本如何响应这种差异。
  • 好的,我添加了控制器和模型代码。我不知道这段代码有什么问题,现在不知道如何解决这个问题。

标签: jquery ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

我昨天尝试了类似的东西,当我使用 ajax.beginform 时遇到了同样的错误,所以使用了..

<form action="Home/upload" method="post" enctype="multipart/form-data">                       
 <input type="file" name="file" id="file" /><br />
 <input type="submit" value="Upload" />                       
</form>

在你的视图中试试这个,这可能会有所帮助..

【讨论】:

  • 我知道您的解决方案,但我需要使用 ajax 发布该表单,因为必须制作可以上传文件(或执行任何操作)而无需重新加载整个页面的表单
  • hii ..你找到解决方案了吗..你能把它贴在这里吗..!!谢谢
【解决方案2】:

您的控制器期待您的表单使用 post 的 httpget 位。如果您从控制器操作中删除 httpget 它应该可以工作。

【讨论】:

  • 这不是真的,因为我将数据发布到具有 [HttpPost] 的操作。我也尝试了你的建议,但它对我不起作用
猜你喜欢
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 2014-12-22
  • 1970-01-01
相关资源
最近更新 更多