【问题标题】:How can i add/send multiple records in asp.net MVC using jQuery?如何使用 jQuery 在 asp.net MVC 中添加/发送多条记录?
【发布时间】:2018-12-31 15:54:00
【问题描述】:

我想在 asp.net mvc 中使用 javascript 在数据库中发送多条记录,我尝试了许多不同的方法,但都是徒劳的。这里我有最好的代码,可以将数据发送到控制器,但文件没有发送。

我搜索了不同的方法,发现其中一种方法是使用 FormData,但在这种情况下我无法处理。

控制器:

public ActionResult SaveAllFeedback(FEEDBACKVM[] fEEDBACKs)
        {
            try
            {
                if (fEEDBACKs != null)
                {
                    FEEDBACK fEEDBACK = new FEEDBACK();
                    foreach (var item in fEEDBACKs)
                    {
                        fEEDBACK.DATE = item.DATE;
                        fEEDBACK.COMMENT = item.COMMENT;
                        fEEDBACK.STUDENTID = item.STUDENTID;
                        fEEDBACK.TEACHERID = db.TEACHERs.Where(x => x.EMAIL == User.Identity.Name).FirstOrDefault().ID;
                        if (item.HOMEWORK != null)
                        {
                            fEEDBACK.HOMEWORK = SaveToPhysicalLocation(item.HOMEWORK);
                        }
                        db.FEEDBACKs.Add(fEEDBACK);
                    }
                    db.SaveChanges();
                    return Json("Done", JsonRequestBehavior.AllowGet);
                }
                return Json("Unable to save your feedback! Please Provice correct information", JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json("Unable to save your feedback! Please try again later.", JsonRequestBehavior.AllowGet);
            }
        }


ViewPage:

<form>
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })


        <div class="form-group">
            <input name="DATE" id="DATE" type="date" class="form-control" />
        </div>

        <table class="table table-responsive table-hover" id="table1">
            <thead>
                <tr class="bg-cyan">
                    <th></th>
                    <th>RollNumber</th>
                    <th>Comment</th>
                    <th>Homework</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in ViewBag.students)
                {
                    <tr>
                        <td>
                            <input name="STUDENTID" type="text" value="@item.Key" hidden="hidden" />
                        </td>
                        <td>
                            <input name="STUDENTROLLNUMBER" type="text" value="@item.Value" class="form-control" readonly="readonly" />
                        </td>
                        <td>
                            <input name="COMMENT" type="text" class="form-control" />
                        </td>
                        <td>
                            <input name="HOMEWORK" type="file" class="form-control" />
                        </td>
                    </tr>
                }
            </tbody>
        </table>

        <div class="form-group">
            <div class="col-md-10">
                @Html.ValidationMessage("ErrorInfo", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <button id="saveButton" type="submit" class="btn btn-danger">Save Attendance</button>
            </div>
        </div>
    </form>



Script:

<script>

           //After Click Save Button Pass All Data View To Controller For Save Database
            function saveButton(data) {
                return $.ajax({
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    type: 'POST',
                    url: '@Url.Action("SaveAllFeedback", "Teacherss")',
                    data: data,
                    success: function (result) {
                        alert(result);
                        location.reload();
                    },
                    error: function () {
                        alert("Error!")
                    }
                });
            }
            //Collect Multiple Order List For Pass To Controller
            $("#saveButton").click(function (e) {
                e.preventDefault();


                var formData = new FormData();

                var arr = [];
                arr.length = 0;

                $.each($("#table1 tbody tr"), function () {
                   //arr.push({
                   //     //DATE: $("#DATE").val(),
                   //     //STUDENTID: $(this).find('td:eq(0) input').val(),
                   //     //COMMENT: $(this).find('td:eq(2) input').val(),
                   //     //HOMEWORK: $(this).find('td:eq(3) input').val()
                   // });

                    formData.append("DATE", $("#DATE").val());
                    formData.append("STUDENTID", $(this).find('td:eq(0) input').val());
                    formData.append("COMMENT", $(this).find('td:eq(2) input').val());
                    formData.append("HOMEWORK", $(this).find('td:eq(3) input')[0].files[0]);


                });

                var data = JSON.stringify({
                    fEEDBACKs: formData
                });

                $.when(saveButton (data)).then(function (response) {
                    console.log(response);
                }).fail(function (err) {
                    console.log(err);
                });
            });

        </script>

我只想将文件的多条记录发送到数据库

【问题讨论】:

  • 一般来说,一次只能上传一个文件,所以如果您有多个文件要更新,每个文件都在自己的行中,这很困难。

标签: javascript c# json ajax asp.net-mvc


【解决方案1】:

您确定要发送文件吗????如果是那么

你的表单标签应该是这样的

<form id="yourid" action="youraction" enctype="multipart/form-data">
  Form Component
</form>

注意:- enctype="multipart/form-data" 标签很重要

然后控制器应该是这样的

    public ActionResult YourController(FormCollection data)
    {
        if (Request.Files.Count > 0)
        {
            foreach (string fileName in Request.Files)
            {
                HttpPostedFileBase file = Request.Files[fileName];
                //you can save the file like this
                string path = Server.MapPath("~/Yourpath/FileName" + fileName.Substring(fileName.LastIndexOf('.')));
                file.SaveAs(path);
                //or you can load it to memory like this
                MemoryStream ms = new MemoryStream();
                file.InputStream.CopyTo(ms);
                //use it how you like
            }
        }            
        return View();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多