2つの列を持つCSVファイルをアップロードする必要があります。1.Key 2.Valueと私は変換テーブルのDBに保存する必要がありますが、エラーは "IndexOutOfRangeException : インデックスが配列の範囲外だった。" ここに私のコードです。ここで "IndexOutOfRangeException:インデックスが配列の境界外にありました。" SqlDbで行ごとにCSVファイルを保存するASP.NET 5 MVC 6
[HttpPost("application/UploadCSV/{id}")]
public async Task<ActionResult> UploadCSV(UploadCSVModelView uploadFileMV, int Id)
{
var csvReader = new StreamReader(uploadFileMV.UploadedFile.OpenReadStream());
var values = new List<string>();
var appId = _applicationlanguageService.GetAll().Where(x => x.ApplicationId == Id).Select(x => x.Id).FirstOrDefault();
List<Translation> listTrans = new List<Translation>();
while (!csvReader.EndOfStream)
{
string abc = csvReader.ReadLine();
var item = abc.Split(',');
listTrans.Add(new Translation(){ KeyName= item[0], Value = item[3], State = (int)EnumState.Created, ApplicationLanguageId = appId, CreatedBy = User.Identity.Name, CreatedOn = DateTime.UtcNow});
}
if (ModelState.IsValid)
{
await _translationService.CreateAsync(listTrans);
}
return RedirectToAction("Index");
}
は私の翻訳モデル
public class Translation : BaseEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string KeyName { get; set; }
public string Value { get; set; }
public int State { get; set; }
[ForeignKey("ApplicationLanguageId")]
public int ApplicationLanguageId { get; set; }
public virtual ApplicationLanguage ApplicationLanguage { get; set; }
}
図である
<div class="row">
<div class="col-md-8">
<section>
<form asp-controller="Application" asp-action="UploadCSV" data-method="post" class="form-horizontal" enctype="multipart/form-data" onsubmit="return beforeSubmit();">
<div asp-validation-summary="ValidationSummary.All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Version" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Version" class="form-control" required />
<span asp-validation-for="Version" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">Media Type</label>
<div class="col-md-10">
<select asp-for="LanguageId" asp-items="Model.LanguagesList" class="form-control"></select>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label">File</label>
<div class="col-md-10">
<input asp-for="UploadedFile" id="fileMedia" type="file" max-size=1048576>
<span id="val-fileMedia" class="text-danger field-validation-valid" style="display:block;color: #C23434;"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">Create</button>
</div>
</div>
</form>
</section>
<div>
<a asp-controller="Application" asp-action="Index">Back to list</a>
</div>
</div>
</div>
キー、英語、オランダ
保存、保存,, Bewaar
送信、送信,, Verstuur
が、彼はデフォルトの言語であり、キー名=項目作ることイムのbecaouseので、私は英語を必要といけない[0]、[値=項目[3]。
よろしく
あなたのCSVがゴミである一方でのtry-catchを置くように、CSVファイルには、空の行を持っているということでした。 3つの列が定義されていますが、データには4つの列があります。また、それはCSVファイルの処理方法でもありません。単に「、」を分割することはできません。フォーマットの作成方法については、CSV RFC https://tools.ietf.org/html/rfc4180を参照してください。 – Tseng