Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Ajax表单在CSV上传时返回null_Asp.net_Ajax_Asp.net Mvc_Asp.net Mvc Partialview - Fatal编程技术网

Asp.net Ajax表单在CSV上传时返回null

Asp.net Ajax表单在CSV上传时返回null,asp.net,ajax,asp.net-mvc,asp.net-mvc-partialview,Asp.net,Ajax,Asp.net Mvc,Asp.net Mvc Partialview,这种设置方式是, -有一个采用CSV上传的视图 -有一个控制器部分视图操作,它应该检索解析CSv并从CSv读取对象,然后将其传递回部分视图。 -局部视图应该在包含所有记录的页面上呈现 但显然,BulkClient对象显示为空 这是控制器:- public ActionResult UploadBulkClients() { return View(); } // [HttpPost] public PartialViewResult _Upload

这种设置方式是, -有一个采用CSV上传的视图 -有一个控制器部分视图操作,它应该检索解析CSv并从CSv读取对象,然后将其传递回部分视图。 -局部视图应该在包含所有记录的页面上呈现

但显然,BulkClient对象显示为空

这是控制器:-

public ActionResult UploadBulkClients()
    {
        return View();
    }

//    [HttpPost]
    public PartialViewResult _UploadBulkClients(HttpPostedFileBase bulkClients) 
    {
        if (bulkClients != null)
        {
            try
            {
                StreamReader reader = new StreamReader(bulkClients.InputStream);
                while (reader != null)
                {
                    var csv = new CsvReader(reader);
                    csv.Read();
                    csv.ReadHeader();

                    while (csv.Read())
                    {
                        newRecord.Add(new ClientAgencyViewModel()
                        {
                            Id = UrbanLighthouse.Shared.Statics.NewUniqueGUID(),
                            ReferenceNo = csv["ReferenceNo"].ToString(),
                            FirstName = csv["FirstName"].ToString(),
                            MiddleName = csv["MiddleName"].ToString(),
                            LastName = csv["LastName"].ToString(),
                            StreetAddress = csv["StreetAddress"].ToString(),
                            City = csv["City"].ToString(),
                            PostalCode = csv["PostalCode"].ToString(),
                            Province = Guid.Parse(csv["Province"].ToString()),
                            Phone = csv["Phone"].ToString(),
                            Email = csv["Email"].ToString()
                        });
                    }
                    foreach (var item in newRecord)
                    {
                        if (repository.DoesEmailExist(item.Email) == true)
                        {
                            item.Email = item.Email + " : " + "Invalid Email Address";
                        }
                        else
                        {
                            item.Email = item.Email + " : " + "This Email is Good";
                        }
                    }
                }
                return PartialView(newRecord);
            }
            catch (System.IO.IOException e)
            {
                return PartialView(e);
            }
        }
        else
        {
            newRecord.Add(new ClientAgencyViewModel()
            {
                ReferenceNo = "Empty",
                FirstName = "Empty",
                MiddleName = "Empty",
                LastName = "Empty",
                StreetAddress = "Empty",
                City = "Empty",
                PostalCode = "Empty",
                Province = Guid.Empty,
                Phone = "Empty",
                Email = "Empty"
            });
            return PartialView(newRecord);
        }
    }
以下是视图的布局方式:- @模型串 @{ Layout=“~/Views/Shared/_LayoutAnonymous.cshtml”; AjaxOptions=新的AjaxOptions { UpdateTargetId=“uploadList”, InsertionMode=InsertionMode.Replace, HttpMethod=“POST” }; }

            <div>
                @using (Ajax.BeginForm("_UploadBulkClients", "Client",options, new { enctype = "multipart/form-data" , role = "form", @class = Css.Form, @id = "formLogin" , action = "/Client/_UploadBulkClients" }))
                {
                <div class="@Css.FormGroup">
                    <h1>Client Bulk Upload</h1>

                    <div class="@Css.InputGroup">
                        <label>Upload CSV File</label>
                        <input type="file" name="postedFile" />
                    </div>

                    <div class="@Css.InputGroup">
                        @Html.Submit("Submit")
                    </div>

                </div>
                }
            </div>

            <div>
                <table class="table table-bordered table-striped">
                    <thead>
                        <tr>
                            <th>Reference No</th>
                            <th>FirstName</th>
                            <th>MiddleName</th>
                            <th>LastName</th>
                            <th>Phone</th>
                            <th>Email</th>
                            <th>StreetAddress</th>
                            <th>City</th>
                            <th>PostalCode</th>
                            <th>Province</th>
                        </tr>
                    </thead>
                    <tbody id="uploadList">
                        @Html.Action("_UploadBulkClients","")
                    </tbody>
                </table>

            </div>

@使用(Ajax.BeginForm(“\u UploadBulkClients”,“Client”,options,new{enctype=“multipart/form data”,role=“form”,“class=Css.form,@id=“formLogin”,action=“/Client/\u UploadBulkClients”}))
{
客户端批量上传
上传CSV文件
@Html.Submit(“提交”)
}
参考号
名字
中间名
姓氏
电话
电子邮件
街道地址
城市
后酒精
省
@Action(“\u uploadBulkClient”,”)
当HttpPost decorator留在PartialView方法的顶部时,它在视图
@Html.Action(“\u UploadBulkClients”,”)
中给出一个错误,表示
\u UploadBulkClients
操作方法不存在

编辑:- 似乎上传没有发布csv文件,我不理解为什么会这样,因为Ajax表单似乎就是它应该的样子


任何帮助都将不胜感激

在Stephen的帮助下,我找到了答案,必须使用JavaScript,而不是C#中的AjaxOption

以下是一些步骤,以防有人遇到类似情况:- 1.返回表单的控制器方法

    public ActionResult UploadBulkClients()
    {
        return View();
    }
二,。表单必须是简单表单,而不是Ajax表单。我在这里使用了Html助手:

@using (Html.BeginForm("_UploadBulkClients", "Client",null, FormMethod.Post , new { enctype = "multipart/form-data" , role = "form", @class = Css.Form, @id = "uploadForm" }))
{
<div class="@Css.FormGroup">
    <h1>Client Bulk Upload</h1>

    <div class="@Css.InputGroup">
        @Html.LabelFor(m=>m.File)
        @Html.TextBoxFor(m=>m.File, new { type= "file"})
    </div>

    <div class="@Css.InputGroup">
        @Html.Submit("Submit")
    </div>

</div>
}
四,。下一部分是局部视图,它呈现控制器方法的输出

  @model List<WebPlatform.ViewModels.ClientAgencyViewModel>
  @foreach (var item in Model)
  {
<tr>
    <td>@item.ReferenceNo</td>
    <td>@item.FirstName</td>
    <td>@item.MiddleName</td>
    <td>@item.LastName</td>
    <td>@item.Phone</td>
    <td>@item.Email</td>
    <td>@item.StreetAddress</td>
    <td>@item.City</td>
    <td>@item.PostalCode</td>
    <td>@item.ProvinceText</td>
</tr>
   }

不能使用
Ajax.BeginForm()
上载文件。使用
FormData
-参考@StephenMuecke我有点困惑,我不知道如何使用FormData,您所说的
是什么意思您可以使用
var FormData=new FormData($('form').get(0))将模型序列化为FormData
只需使用我给你的链接中的代码:)但你的文件输入名为
postedFile
,这意味着你的POST方法中的参数需要匹配-即
HttpPostedFileBase postedFile
如果我懂javascript,我不会问,我需要你向我解释如何使用FormData,或者给我一个链接,因为我还不熟悉ASP.NETMVC,还在学习。JavaScript仍然是我需要坐下来学习的东西,如何使用它!
  @model List<WebPlatform.ViewModels.ClientAgencyViewModel>
  @foreach (var item in Model)
  {
<tr>
    <td>@item.ReferenceNo</td>
    <td>@item.FirstName</td>
    <td>@item.MiddleName</td>
    <td>@item.LastName</td>
    <td>@item.Phone</td>
    <td>@item.Email</td>
    <td>@item.StreetAddress</td>
    <td>@item.City</td>
    <td>@item.PostalCode</td>
    <td>@item.ProvinceText</td>
</tr>
   }
$('#uploadForm').submit(function(e) {
e.preventDefault();
var formdata = new FormData($(this).get(0));
$.ajax({
    url: '@Url.Action("_UploadBulkClients","Client")',
    type: 'POST',
    data: formdata,
    processData: false,
    contentType: false,
    success: function (response) {
        $('#uploadList').html(response);
     }
   },

  );
});