Eu tenho um upload de formulário que funciona, mas gostaria de passar informações do modelo para meu banco de dados para salvar o arquivo com um nome diferente, é claro.
Aqui está minha visão do Razor:
@model CertispecWeb.Models.Container
@{
ViewBag.Title = "AddDocuments";
}
<h2>AddDocuments</h2>
@Model.ContainerNo
@using (Html.BeginForm("Uploadfile", "Containers", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<input type='file' name='file' id='file' />
<input type="submit" value="submit" />
}
Aqui está meu controlador:
[HttpPost]
public ActionResult Uploadfile(Container containers, HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"),
containers.ContainerNo);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
As informações do modelo não são transmitidas ao controlador. Eu li que posso precisar atualizar o modelo, como faria isso?
asp.net-mvc
asp.net-mvc-3
razor
Francis
fonte
fonte
Respostas:
Seu formulário não contém nenhuma tag de entrada além do arquivo, portanto, na ação do seu controlador, você não pode esperar receber nada além do arquivo carregado (isso é tudo o que está sendo enviado ao servidor). Uma maneira de conseguir isso seria incluir uma tag oculta contendo o id do modelo, que permitirá que você recupere-o de seu armazenamento de dados dentro da ação do controlador para a qual você está postando (use isso se o usuário não deve modificar o modelo, mas basta anexar um arquivo):
e então em sua ação do controlador:
Por outro lado, se você quiser permitir que o usuário modifique este modelo, você precisará incluir os campos de entrada apropriados para cada campo do seu modelo que deseja enviar ao servidor:
e então você terá o fichário do modelo padrão reconstruir este modelo a partir da solicitação:
fonte
file
asnull
eRequest.Files.Count
é 0 também, haveria alguma diferença se oform
fosse umAjaxForm
e houvesserouteValues
também?Resolvido
Modelo
Controlador
E ver
Observe que o título do parâmetro da ação do controlador deve corresponder ao nome dos elementos de entrada
IEnumerable<HttpPostedFileBase> fileUpload
->name="fileUpload[0]"
fileUpload
deve combinarfonte
Se você nem sempre tem imagens postando em sua ação, você pode fazer algo assim:
fonte
Para vários arquivos; observe o atributo " múltiplo " mais recente para entrada:
Formato:
Controlador:
fonte
Primeiro download do arquivo jquery.form.js do url abaixo
http://plugins.jquery.com/form/
Escreva o código abaixo em cshtml
Método de ação: -
fonte