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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top