2016-05-10 41 views
-1

我需要將用戶上傳的CSV數據導入數據庫。 步驟 - 1.用戶上傳數據到MVC視圖 2.在視圖中顯示所有上傳的數據 3.用戶可以根據導入的值選擇列名稱 3.根據用戶選擇的記錄導入數據。將上傳的數據顯示到MVC視圖並將選定的記錄導入數據庫

要實現這一點,我在下面模型創建 -

public class ImportCSVData 
{  
    public IEnumerable<System.Web.Mvc.SelectListItem> Names { get; set;} // This is to display dynamic column  
    public HttpPostedFileBase File { get; set; }  
    public DataTable Data { get; set; } 
} 

在控制器中,我解析上傳的文件(示例代碼)

public ActionResult ImportCSVCustomer() 
    { 
     ImportCSVData model = new ImportCSVData(); 
     HttpPostedFileBase upfile = Request.Files["File"]; 
     model.File = upfile;    
      var dt = ParseCSVData(model); 
      if (dt != null && dt.Rows.Count > 0) 
      {     
       var dcRec = new DataColumn("ShouldImport", typeof(bool));     
       dcRec.DefaultValue = false; 
       dt.Columns.Add(dcRec);   
       model.Data = dt; 
       List<SelectListItem> Names = getColumnNames(); 
       model.Names = Names;     
       return PartialView("_ImportedCSVCustomer", model); 
      }      
     return View(); 
    } 

樣品認爲我設計 -

@for (int i = 0; i < Model.Data.Rows.Count; i++) 
    { 
    <tr> 
    <td data-val="@i"> 
    <input type="checkbox" name="sid" [email protected][i][Model.Data.Columns.Count - 1] class="sid"> 
    </td> 
    @for (int j = 0; j < Model.Data.Columns.Count - 1; j++) 
    { 
    <td> 
     @Model.Data.Rows[i][j].ToString() 
     @Html.HiddenFor(Model.Data.Rows[i][j].ToString()) 
    </td> 
    } 
    </tr> 
    } 

我正在處理視圖來顯示,但發佈後無法獲取模型值從視圖到控制器。 任何想法如何實現這個?

+0

你的代碼沒有任何意義。這是一種GET或POST方法嗎?而且你不使用'DataTable'(你不能發表)。您需要一個包含屬性的視圖模型來顯示/提交您的數據 –

+0

設計模型的最佳選擇是什麼,這些屬性的行爲與數據表類似?因爲我的列和行都可以是動態的。 – user1841927

回答

0

您需要在return語句中傳遞模型。因此,你需要:

return View(model)

然後在視圖中,你必須確保你正在實現一個視圖通過在.cshtml文件

@model xxx.ImportCSVData

哪裏xxx是頂部有命名空間。

誠實地說,我也把[HttpPost]放在控制器的頂部,以確保你只能POST,並且使用AntiForgeryToken。 http://peterkellner.net/2014/05/19/asp-net-mvc-forms-need-include-html-antiforgerytoken-security/

+0

在我的get方法中,我正在返回模型,並且在我的視圖中使用了具有適當名稱空間的模型。這就是爲什麼我能夠在網格中顯示數據但無法發佈到控制器的原因。 – user1841927

+0

你應該有兩個獨立的控制器。一個用於GET,一個用於POST。它們之間的區別是你會傳遞數據。 '''[HttpPost]''' '''公共ActionResult ImportCSVCustomer(ImportCSVData模型)''' –

+0

感謝和抱歉的混淆。我只使用了兩個獨立的控制器。但是我沒有提供第二個控制器的代碼,我從視圖中發佈數據,因爲我無法訪問模型值,只能在那裏停留! – user1841927

相關問題