Existe-t-il un moyen d'obtenir des fichiers publiés (<input type="file" />
) pour participer à la liaison de modèle dans ASP.NET MVC sans consulter manuellement le contexte de demande dans un classeur de modèle personnalisé , et sans créer une méthode d'action distincte qui prend seulement un fichier publié en entrée?ASP.NET MVC a publié la liaison de modèle de fichier lorsque le paramètre est Modèle
j'aurais pensé que cela fonctionnerait:
class MyModel {
public HttpPostedFileBase MyFile { get; set; }
public int? OtherProperty { get; set; }
}
<form enctype="multipart/form-data">
<input type="file" name="MyFile" />
<input type="text" name="OtherProperty" />
</form>
public ActionResult Create(MyModel myModel) { ... }
Mais étant donné le scénario ci-dessus, MyFile
est même pas partie des valeurs du fournisseur de valeur dans le contexte de liaison. (OtherProperty
est, bien sûr.) Mais il fonctionne si je fais ceci:
public ActionResult Create(HttpPostedFileBase postedFile, ...) { ... }
Alors, pourquoi ne pas de liaison se produit lorsque le paramètre est un modèle, et comment puis-je le faire fonctionner? Je n'ai aucun problème avec l'utilisation d'un classeur de modèle personnalisé, mais comment puis-je le faire dans un classeur modèle personnalisé sans regarder Request.Files["MyFile"]
? Par souci de cohérence, de clarté et de testabilité, je souhaite que mon code fournisse une liaison automatique de toutes les propriétés d'un modèle, y compris celles liées aux fichiers publiés, sans inspecter manuellement le contexte de la demande. Je suis actuellement en train de tester la liaison de modèle en utilisant the approach Scott Hanselman wrote about. Ou est-ce que je vais à ce sujet dans le mauvais sens? Comment résoudriez-vous cela? Ou n'est-ce pas possible par conception en raison de l'historique de séparation entre Request.Form et Request.Files?
* Note: * ne pas négliger l'attribut 'enctype' sur le formulaire. Il doit être spécifié comme "multipart/form-data" '. Sinon, l'argument 'HttpPostedFileBase' avec le nom correspondant comme attribut' name' sur la balise d'entrée, restera 'null' sur POST. –
J'ai utilisé la même chose mais j'ai eu l'erreur: - Impossible de lier plusieurs paramètres, dans mon $ .ajax j'ai défini: - type: 'POST', dataType: 'json', contentType: 'multipart/form-data' , data: formData – ujjaval