打开excel文件,在asp.net MVC中进行编辑

时间:2017-01-21 06:42:19

标签: asp.net asp.net-mvc excel

我正在使用asp.net mvc,我的要求如下

  1. 上传任何Excel文件
  2. 删除所有Excel文件
  3. 编辑任何Excel文件
  4. 为此,我跟随tutorial,我可以执行12步骤。但对于步骤3,我只能编辑NameDescription,如链接所示

    现在我想要的是,每当我点击edit时,应该打开所选的excel文件,用户可以编辑并保存,保存的文件应该在同一个位置。

    我的create操作代码如下:

      public ActionResult Create(Support support)
        {
            if (ModelState.IsValid)
            {
                List<FileDetail> fileDetails = new List<FileDetail>();
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    var file = Request.Files[i];
    
                    if (file != null && file.ContentLength > 0)
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        FileDetail fileDetail = new FileDetail()
                        {
                            FileName = fileName,
                            Extension = Path.GetExtension(fileName),
                            Id = Guid.NewGuid()
                        };
                        fileDetails.Add(fileDetail);
    
                        var path = Path.Combine(Server.MapPath("~/App_Data/Upload/"), fileDetail.Id + fileDetail.Extension);
                        file.SaveAs(path);
                    }
                }
    
                support.FileDetails = fileDetails;
                db.Supports.Add(support);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            return View(support);
        }
    

    贝娄是我create

    的剃刀
    @using (Html.BeginForm("Create", "Support", null, FormMethod.Post,   new { enctype = "multipart/form-data" }))
      {
        @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    
    <fieldset>
        <legend>Create Support Request</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Summary)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(model => model.Summary)
            @Html.ValidationMessageFor(model => model.Summary)
        </div>
        <div class="editor-label">
            <label>Files:</label>
        </div>
        <div class="editor-field">
            <input type="file" name="file" multiple="multiple" />
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
    }
    <div>
      @Html.ActionLink("Back to List", "Index")
    </div>
    

    Bellow是我edit

    的行动代码
      [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Support support)
        {
            if (ModelState.IsValid)
            {
    
                //New Files
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    var file = Request.Files[i];
    
                    if (file != null && file.ContentLength > 0)
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        FileDetail fileDetail = new FileDetail()
                        {
                            FileName = fileName,
                            Extension = Path.GetExtension(fileName),
                            Id = Guid.NewGuid(),
                            SupportId = support.SupportId
                        };
                        var path = Path.Combine(Server.MapPath("~/App_Data/Upload/"), fileDetail.Id + fileDetail.Extension);
                        file.SaveAs(path);
    
                        db.Entry(fileDetail).State = EntityState.Added;
                    }
                }
    
                db.Entry(support).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(support);
        }
    public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Support support = db.Supports.Include(s => s.FileDetails).SingleOrDefault(x => x.SupportId == id);
            if (support == null)
            {
                return HttpNotFound();
            }
            return View(support);
        }
    

    Bellow是我用于编辑的剃刀语法

    @model MultipleFileUpload.Models.Support
     @{
       ViewBag.Title = "Edit";
      }
    
    @using (Html.BeginForm("Edit", "Support", null, FormMethod.Post, new    {    enctype = "multipart/form-data" }))
    {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    
    <fieldset>
        <legend>Edit Support Request</legend>
        @Html.HiddenFor(model => model.SupportId)
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.Summary)
        </div>
        <div class="editor-field">
            @Html.TextAreaFor(model => model.Summary)
            @Html.ValidationMessageFor(model => model.Summary)
        </div>
        <div class="editor-label">
            <label>Files:</label>
        </div>
        <div class="editor-field">
            <input type="file" name="file" multiple="multiple" />
            <ul class="attachment">
                @foreach (var item in Model.FileDetails)
                {
                    <li>
                        <a class="title" href="/Support/Download/?p=@(item.Id + item.Extension)&d=@item.FileName">@item.FileName</a>
                        <a href="javascript:void(0);" data-id="@item.Id" class="deleteItem">X</a>
                    </li>
                }
            </ul>
        </div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
      }
      <div>
       @Html.ActionLink("Back to List", "Index")
      </div>
    

    在编辑剃须刀中,我有一个delete选项,所以bellow是我的删除脚本

     @section Scripts 
         {
         <script src="~/Scripts/jquery.validate.min.js"></script>
         <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
         <script>
                $('.deleteItem').click(function (e) {
                     e.preventDefault();
            var $ctrl = $(this);
            if (confirm('Do you really want to delete this file?')) {
                $.ajax({
                    url: '@Url.Action("DeleteFile")',
                    type: 'POST',
                    data: { id: $(this).data('id') }
                }).done(function (data) {
                    if (data.Result == "OK") {
                        $ctrl.closest('li').remove();
                    }
                    else if (data.Result.Message) {
                        alert(data.Result.Message);
                    }
                     }).fail(function () {
                    alert("There is something wrong. Please try again.");
                  })
              }
          });
    </script>
    }
    

    任何帮助都将受到高度赞赏

0 个答案:

没有答案