ASP.Net MVC文件上传后期参数

时间:2010-08-30 21:05:41

标签: asp.net html asp.net-mvc-2 file-upload

我正在尝试使用包含在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);
}

我的视图强烈输入到ViewModel:

Inherits="System.Web.Mvc.ViewPage<TestExcelImport.Areas.Admin.ViewModels.AddCustomersViewModel>

并具有以下文件上传内容:

<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> 

我的HttpPost行动方法定义为:

    [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");
    }

我尝试在HttpPost返回方法参数列表中添加AddCustomersViewModel,但它始终为null。我可以很好地阅读/解析上传的文件,只是无法找回它所属的BatchId。

有人看到我做错了吗?

由于

1 个答案:

答案 0 :(得分:7)

虽然有很多方法可以达到你想要的效果,但我会推荐以下内容(因为它是最简单的):

将您的操作方法签名更改为:

public ActionResult AddCustomers(int BatchID, HttpPostedFileBase SourceFile) 

将渲染视图更改为:

<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>

这可确保您的BatchId值与文件一起往返。

更高级的解决方案(如果这不符合您的需求)可能包括:

  • 在表单发布到的URL中添加BatchId。
  • 使用会话状态存储ID。