在.NET MVC中使用@ Ajax.BeginForm上传图像?

时间:2018-07-09 13:31:09

标签: asp.net-mvc

我想在应用程序中使用Ajax.BeginForm上传图片。

当前HttpPostedFileBase file正在获得价值0。有人请在这里引导我。

我尝试了此代码,但文件未上传。

不胜感激,如果有人可以为此提供一些解决方案。如果我使用@ Html.BeginForm,则可以使用,但我想使用@ Ajax.BeginForm。

型号

 public class ClsUpload
    {
        public string FilePath { get; set; }
    }

控制器

public ActionResult Edit(ClsUpload model,HttpPostedFileBase file)
        {
            if (Request.Files.Count > 0)
            {
                 file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    string fileName = Path.GetFileName(file.FileName);
                    string path = Path.Combine(Server.MapPath("/Content/Images/"), fileName);
                    file.SaveAs(path);
                    model.FilePath = path;
                }   
            }

            try
            {
                UploadDetials details = new UploadDetials();

                 details.UpdateDetails(model);
                return RedirectToAction("Index");
            }
            catch
            {
                return RedirectToAction("Index");
            }

        }

部分视图

 @model XX.X.Models.File.ClsUpload

 @using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "partial", InsertionMode = InsertionMode.Replace }))
    { 
    @Html.HiddenFor(model => model.FilePath)
       <input type="file" name="file" />
      <img src=@Model.FilePath alt="Image" />

      <input type="submit" value="Save" />
    }   

2 个答案:

答案 0 :(得分:0)

您可以使用 FormMethod.Post,新的{enctype =“ multipart / form-data”}) [AcceptVerbs(HttpVerbs.Post)] 更新代码跟随

在部分视图中

    @using (Html.BeginForm("ActionMethod1", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
                                        {

}

在控制器中

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ActionMethod1(HttpPostedFileBase pic)
{
}

答案 1 :(得分:0)

这很旧,但是我想展示如何使用Ajax.BeginForm()上传文件。基本上,过载将告诉您什么是可能的。我将重载用于:“字符串actionName,字符串controllerName,对象routeValues,AjaxOptions,ajaxOptions,对象htmlAttributes”。注意:我为“ routeValues”使用null。

这是一个代码示例:

@using (Ajax.BeginForm("UploadFile", "Home", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "MyIDToUpdate", OnSuccess = "EditSuccessClearForm('IDToClear', '')", OnFailure = String.Format("NewGenericFailure(xhr, '{0}')", "#IDToPassThisFunction"), InsertionMode = InsertionMode.ReplaceWith }, new { enctype = "multipart/form-data", @id = "NewFileFormID" }))
    {
        @Html.AntiForgeryToken()
        <div class="row">
            <div class="col-sm-8 col-sm-offset-1">
                @Html.TextBox("file", "", new { type = "file", accept = ".jpg, .jpeg, .png, .pdf", @id = fileID, onchange = VerifySizeOfFile })
            </div>
            <div class="col-sm-2">
                 <button type="submit" id="FileSubmitButton" class="btn btn-primary">Upload</button>
            </div>
        </div>
    }