为什么文件上传器不起作用?

时间:2013-07-25 20:54:39

标签: asp.net-mvc-4

我创建了一个示例mvc应用程序来测试文件上传我读了这个有用的post并且这样做但是客户端验证器没有工作并且给我错误我的所有代码都是:

我用heder标签附上这些:

<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>  
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

我的模特:

public class FIleModel
{
   [Required, FileExtensions(Extensions = "csv", ErrorMessage = "Specify a CSV file. (Comma-separated values)")]
   public HttpPostedFileBase myFile { get; set; }
}

错误:

Unhandled exception at line 4, column 9003 in http://localhost:6284/Scripts    
/jquery.validate.min.js
   0x800a138f - JavaScript runtime error: Unable to get property 'call' 
   of undefined or null reference

在我看来:

 @using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    { 
        @Html.ValidationSummary();
        <fieldset>
            <legend>Registration Form</legend>
            <ol>
                <li class="lifile">
                    @Html.TextBoxFor(m => m.myFile, new { type = "file" })
                    @Html.ValidationMessageFor(m => m.myFile)

                </li>
            </ol>
            <input type="submit" id="btnSubmit" value="Upload" />
        </fieldset>
    }

1 个答案:

答案 0 :(得分:0)

对于文件上传,您可以使用此代码。

在控制器中:

[HttpPost]
public ActionResult Create(EventModel eventmodel, HttpPostedFileBase file)
{ 
   if (ModelState.IsValid)
   {

      //you can validate file here. if okay continue...

      var filename = Path.GetFileName(file.FileName);
      var path = Path.Combine(Server.MapPath("~/Uploads/Photo/"), filename);
      file.SaveAs(path);
      eventmodel.Url = filename;

      _db.EventModels.AddObject(eventmodel);
      _db.SaveChanges();
      return RedirectToAction("Index");
   }
   return View(eventmodel);
}

观看:

<div>
   Image
   <input type="file" name="file" id="file" />
   @Html.HiddenFor( model => model.ImageUrl)
   @Html.ValidationMessageFor( model => model.Url )
</div>