2013-06-13 4 views
0

Je utilise cette surcharge de Ajax.BeginForm():ASP MVC ActionName dans Ajax.BeginForm

(this AjaxHelper, AjaxOptions ajaxOptions):MvcForm 

Et bien la qualité dépend.

Mais maintenant, je dois ajouter un attribut à mon <form> -tag, donc je dois envoyer htmlAttributes - ergo-je utiliser une autre surcharge du Ajax.BeginForm().

Voici mon problème: Lorsque j'utilise la première surcharge, j'obtiens un href correct pour le formulaire, mais avec la deuxième surcharge, je dois passer dans un ActionName. J'ai essayé de passer dans le vrai ActionName, et j'ai le mauvais href. J'ai essayé de passer en valeur NULL, et c'est toujours le mauvais href (mais le même que quand je passe dans le vrai ActionName ("Index")).

Existe-t-il une autre méthode que je pourrais utiliser pour ajouter mon attribut de formulaire ou quelque chose pour résoudre ce problème? (Je pourrais bien sûr l'ajouter avec un javascript, comme nous l'avons fait dans les années 90, mais c'est 2013 ...)

EDIT: Voici la surcharge que j'utilise maintenant, qui me donne le mauvais href :

Ajax.BeginForm("Index",null,new AjaxOptions() { HttpMethod = "POST", 
InsertionMode = InsertionMode.Replace, UpdateTargetId = "myform" }, 
    new { enctype = "multipart/form-data" }) 
+0

Avez-vous vos itinéraires configurés correctement pour permettre la création automatique des URL correctement? –

+0

Pour être honnête, non. Et je soupçonne que cela pourrait être parce que j'utilise un CMS (EPiServer), parce que ce qui ne va pas avec ActionName spécifié me manque la branche de pays comme ceci: http://mysite.com/en/englishpage - avec ActionName le surcharger devient http://mysite.com/englishpage. EPiServer me fournit les routages de langues. – Annish

Répondre

0

Ceci est la surcharge que vous voulez.

@Ajax.BeginForm("actionName", "controllername", null, ajaxOptions: new AjaxOptions(), htmlAttributes: new Dictionary<string, object>()) 

Spécifiez vos noms d'action et de contrôleur. Vous spécifiez ensuite null pour les valeurs de route et transmettez le reste de vos paramètres.

Veuillez noter que la déclaration des paramètres avec la spécification du nom d'argument était juste à des fins d'illustration. C'est l'ordre par défaut pour cette surcharge, donc vous n'avez pas besoin de les déclarer explicitement comme je l'ai fait.

+0

C'est la surcharge que j'ai utilisée (qui me donne un href différent). Stupide de ne pas ajouter cela dans la question, je vais l'éditer maintenant. – Annish

+0

Dans ce cas, utilisez la surcharge qui inclut également le nom du contrôleur explicite. De cette façon, il ne peut pas pointer vers l'action incorrecte –

1

essayer

@Ajax.BeginForm("Index","YourControllerName",null,new AjaxOptions() { HttpMethod 
="POST", InsertionMode = InsertionMode.Replace,UpdateTargetId = "myform"}, 
new { enctype = "multipart/form-data" }) 
Questions connexes