我還在學習MVC,我不知道是否可行,在我的應用程式中,我正在執行excel上傳任務。
所以這里上傳了 Excel,我正在添加這些 excel 資料以查看包并在視圖中顯示。
for (int i = 2; i <= range.Rows.Count; i )
{
try
{
M_Employee emp = new M_Employee();
string comName = ((Microsoft.Office.Interop.Excel.Range)range.Cells[i, 1]).Text;
var tempCompanyId = (from c in db.CreateCompany where c.CompanyName == comName select c.Id).First();
emp.CompanyId = tempCompanyId;
emp.EmpNo = int.Parse(((Microsoft.Office.Interop.Excel.Range)range.Cells[i, 2]).Text);
emp.EmpName = ((Microsoft.Office.Interop.Excel.Range)range.Cells[i, 3]).Text;
string dep = ((Microsoft.Office.Interop.Excel.Range)range.Cells[i, 4]).Text;
var tempDepId = (from d in db.CreateDepartment where d.Department == dep select d.Id).First();
emp.DepId = tempDepId;
string dessig = ((Microsoft.Office.Interop.Excel.Range)range.Cells[i, 5]).Text;
var tempDessId = (from h in db.CreateDesignation where h.Designation == dessig select h.Id).First();
emp.DesignId = tempDessId;
employees.Add(emp);
}
catch (Exception ex)
{
ViewBag.Error = "Error in " i " record";
return View("Import");
}
}
if (employees !=null)
{
ViewBag.EmpList = employees;
return View("Import");
}
在視圖中,它向用戶顯示了 excel 匯入的資料。
因此,為了將這些資料上傳到資料庫表,我創建了一個按鈕,用于在視圖中映射上傳操作結果
<input type="button" value="Upload" class="btn btn-success" onclick="location.href='@Url.Action("UploadEmployees", "M_Employee")'" />
在那個動作中,我試圖呼叫那些ViewBag.EmpList來獲取相同的資料并傳遞給表。
foreach (var item in ViewBag.EmpList)
{
int ComId = item.CompanyId;
int EmpNo = item.EmpNo;
string EmpName = item.EmpName;
int DepId = item.DepId;
int DesId = item.DesignId;
}
但是我收到一個錯誤 viewbag 值為空。那么有沒有其他方法可以做到這一點?
謝謝
編輯--
這是我的看法
@{
ViewBag.Title = "Import";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div>
@using (Html.BeginForm("Import", "M_Employee", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="card card-primary">
<div class="card-header">
<h1 class="card-title"><b>Upload Employees from Excel</b></h1>
</div>
<!-- /.card-header -->
<div>
<br />
@Html.Raw(ViewBag.Error)
<h4><span>Select Excel File</span></h4>
<input type="file" name="excelFile" class="btn btn-warning" />
<br />
</div>
<div class="row">
<div class="col-md-1">
<br />
<br />
<input type="submit" value="Import" class="btn btn-info" />
</div>
<div class="col-md-1">
<br />
<br />
<input type="button" value="Upload" class="btn btn-success" onclick="location.href='@Url.Action("UploadEmployees", "M_Employee")'" />
</div>
</div>
<div class="card-body p-0">
<table class="table table-striped">
<tr>
<th>Company</th>
<th>EmpId</th>
<th>EmpName</th>
<th>Department</th>
<th>Dessignation</th>
</tr>
@if (ViewBag.EmpList != null)
{
foreach (var item in ViewBag.EmpList)
{
<tr>
<td>
@item.CompanyId
</td>
<td>
@item.EmpNo
</td>
<td>
@item.EmpName
</td>
<td>
@item.DepId
</td>
<td>
@item.DesignId
</td>
</tr>
}
}
</table>
</div>
<!-- /.card-body -->
</div>
}
</div>
這是我創建的視圖模型。
[NotMapped]
public class EmpExcelUploadViewModel
{
public int CompanyId { get; set; }
public int EmpNo { get; set; }
public string EmpName { get; set; }
public int EmpDep { get; set; }
public int EmpDes { get; set; }
}
uj5u.com熱心網友回復:
您可以使用 ViewBag 或 ViewData 僅以一種方式將資料從控制器傳輸到視圖。
您應該使用表單將資料從客戶端瀏覽器重新發送到后端。
或者,如果用戶無法編輯資料,您可以使用以下任何一種:
- 第一步保存檔案,然后使用之前上傳檔案的識別符號,重新讀取保存
- 像
draft第一步一樣決議檔案并將決議的資料保存到存盤中,然后在第二步中draft從資料中洗掉標記
uj5u.com熱心網友回復:
您不能使用 ViewBag 將資料從客戶端計算機移動到服務器。您可以使用 Session 或 TempData(如果資料很小)將資料保存在服務器中,但我不建議使用它,因為它會影回應用程式的可擴展性。
你有2種方式
在上傳操作中重復下載并將資料保存到資料庫
或者你必須修復動作,使用模型而不是視圖包
....
if (employees !=null)
{
return View("Import", employees);
}
else ... you error code
在匯入視圖中添加表單并通過提交按鈕替換 ancor
@model List<Employee>
@using (Html.BeginForm("UploadEmployees", "M_Employee", FormMethod.Post))
{
.... emloyee input controls
<button type="submit" value="Upload" class="btn btn-success"> </>
}
在 UploadEmployees 操作中,您可以從輸入引數中獲取資料并保存到資料庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/390885.html
標籤:C# 网站 asp.net-mvc
下一篇:標題內容型別應該做什么?
