jro*_*rob 4 html asp.net file-upload asp.net-mvc-2
我正在尝试使用包含在ViewModel中的特定batchId参数转到视图,选择要上载的文件,获取上载的文件并将文件数据与关联的BatchId值一起存储在数据库中.
提交表单时,我不知道如何取回viewmodel和PostedFileBase,以便我可以获取BatchId值.
我需要batchId值将它与我存储在数据库中的数据相关联.
我的控制器中有以下操作方法,允许通过文件上载和导入将新客户添加到指定的批处理:
public ActionResult AddCustomers(int batchId)
{
var viewModel = new AddCustomersViewModel() { BatchId = batchId, //other view model properties };
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
我的视图是强类型的ViewModel:
Inherits="System.Web.Mvc.ViewPage<TestExcelImport.Areas.Admin.ViewModels.AddCustomersViewModel>
Run Code Online (Sandbox Code Playgroud)
并具有以下文件上传:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>AddCustomers Batch ID : <%:Model.BatchId %></h2>
<form action="/Admin/Dashboard/AddCustomers" enctype="multipart/form-data" method="post">
<input type="file" id="SourceFile" name="SourceFile" />
<br />
<input type="submit" value="Send" name="btnUpload" id="Submit1" />
</form>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
我的HttpPost Action方法定义为:
[HttpPost]
public ActionResult AddCustomers(HttpPostedFileBase SourceFile)
{
//int batchId = ??? HOW DO I Get the BatchId
int fileLength = SourceFile.ContentLength; //works!
// read through SourceFile.InputStream and store it in db
//need the associated BatchID though
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试在HttpPost返回方法参数列表中添加AddCustomersViewModel但它始终为null.我可以很好地读取/解析上传的文件,只是无法找回它所属的BatchId.
有谁看到我做错了什么?
谢谢
虽然有很多方法可以达到你想要的效果,但我会推荐以下内容(因为它是最简单的):
将您的操作方法签名更改为:
public ActionResult AddCustomers(int BatchID, HttpPostedFileBase SourceFile)
Run Code Online (Sandbox Code Playgroud)
并将渲染视图更改为:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>AddCustomers Batch ID : <%:Model.BatchId %></h2>
<form action="/Admin/Dashboard/AddCustomers" enctype="multipart/form-data" method="post">
<input type="hidden" value="<%: Model.BatchId %>" id="BatchID" name="BatchID" />
<input type="file" id="SourceFile" name="SourceFile" />
<br />
<input type="submit" value="Send" name="btnUpload" id="Submit1" />
</form>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
这可确保您的BatchId值与文件一起往返.
更高级的解决方案(如果这不符合您的需求)可能包括:
| 归档时间: |
|
| 查看次数: |
7883 次 |
| 最近记录: |