Ligação HTTPPOSTEDFILEBASE usando ajax.beginform
-
21-09-2019 - |
Pergunta
Eu tenho um formulário que vincula um modelo e um upload de arquivo usando o fichário padrão para httppotedfilebase.
Isso funciona bem ao usar html.beginform (). No entanto, eu queria executar a mesma ação usando o Ajax, então substituí isso pelo Ajax.Beginform () Alterando os parâmetros de acordo.
O modelo ainda se liga corretamente, no entanto, não consigo fazer o upload do arquivo para vincular ao HTTPPOSTEDFILEBASE.
Isso vincula o modelo e o upload do arquivo:
<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
Isso apenas liga o modelo:
<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>
A ação do controlador:
public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)
Isso deve ser possível e, se sim, o que estou fazendo de errado? Obrigado.
Solução
Você não pode fazer upload de arquivos com Ajax. Uma maneira de conseguir isso é usar um iframe oculto que simulará uma chamada AJAX e executar o upload de arquivo real ou usar o Flash. Aqui está um muito bom formulário de jQuery O plug -in usando um iframe oculto é capaz de fazer de transparentemente um envio de arquivo de envio de formulário contendo campos de arquivo.
Outras dicas
É possível, a resposta está aqui:
https://stackoverflow.com/a/13522052/1067149
Eu mesmo fiz isso e é garantido que funciona.
ADICIONAR id="file"
Na sua entrada de tags
Em seu parâmetro actionResult HttppotedFileBase 'Nome do arquivo' e o nome da tag de visualização devem ser iguais
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(tbl_products tbl_products,HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
tbl_products.phototype = file.ContentType;
tbl_products.photo =new byte[file.ContentLength ];
file.InputStream.Read(tbl_products.photo,0, file.ContentLength);
if(obj.insert(tbl_products))
{
return RedirectToAction("Index");
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
}
}
return View(tbl_products);
}
FUNCIONA PARA MIM
Sim, eu também concordo. Você pode definitivamente fazer upload de arquivos usando 'ajax.beginform'.add' ENCTYPE = "Multipart/Form-Data" 'para o objeto Ajaxoptions.