Параметры сообщения загрузки файла ASP.Net MVC - PullRequest
4 голосов
/ 31 августа 2010

Я пытаюсь перейти к представлению с указанным параметром batchId, обернутым во ViewModel, выбрать файл для загрузки, вернуть загруженный файл и сохранить данные файла со связанным значением 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");
    }

Я попытался добавить AddCustomersViewModel в список параметров метода возврата HttpPost, но он всегда равен нулю.Я могу читать / анализировать загруженный файл просто отлично, просто не могу узнать, в какой BatchId он входил.

Кто-нибудь видит, что я делаю неправильно?

Спасибо

1 Ответ

7 голосов
/ 31 августа 2010

Хотя есть несколько способов добиться того, чего вы хотите, я бы порекомендовал что-то вроде следующего (поскольку это самое простое):

Измените подпись метода действия на:

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 будет возвращено вместе с файлом.

Более продвинутые решения (если они не соответствуют вашим потребностям) могут включать:

  • добавление BatchId в URL, на который отправляется форма.
  • использование состояния сеанса для хранения идентификатора.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...