J'ai un cas étrange et je voulais votre illumination. J'ai deux contrôleurs. Un contrôleur de personne pour une personne générale utilise des méthodes d'action et un contrôleur de candidat pour des méthodes d'action plus spécifiques liées au candidat. J'utilise une vue partielle située dans le dossier Person afin d'être utilisée comme générique au cas où je souhaiterais l'utiliser à l'avenir pour d'autres types de personnes. Pour l'instant, cette vue partielle utilise un Ajax.BeginForm ciblant le contrôleur candidat. La syntaxe J'utilise estAjax.BeginForm avec 4 arguments ne trouvant pas la méthode d'action
@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
}))
{
// form input elements
}
Ce type de Ajax.BeginForm fonctionne correctement en dépit du fait qu'il vise une action dans un autre contrôleur. Maintenant, pour ma validation de formulaire, j'ai dû mettre plus d'arguments à mon Ajax.BeginForm. Ma nouvelle syntaxe est la suivante:
@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate",
new AjaxOptions
{
HttpMethod = "Post",
OnBegin = "onBeginFormValidation",
OnSuccess = "onSaveCandidateLanguageSuccess"
},
new
{
id = "addEditCandidateLanguageForm",
novalidate = "novalidate"
}))
{
// form input elements
}
Pour une raison quelconque, cette méthode ne trouve pas la méthode Action. Si je mets mon action à l'intérieur du contrôleur de personne cela fonctionne correctement encore. Cependant je me demandais pourquoi est ce cas. J'ai creusé mais je n'ai pas réussi à obtenir une réponse à ce sujet.
De Firebug je vois que l'URL du navigateur tente de poster est pour une raison quelconque
http: // {} ProjectName/personne/SaveCandidateLanguage Longueur = 9
au lieu de
http : // {ProjectName}/Candidate/SaveCandidateLanguage? Length = 9
et naturellement j'obtiens une réponse 404 Non trouvée. Je me demandais aussi quelle est la variable? Length = 9 que je vois à la fin de l'url et d'où vient-elle.
Et la raison de '? Longueur = « 9 »' est parce que « candidat » contient 9 caractères et 'length' est la seule propriété de' string' –
Merci pour la réponse! Maintenant, cela a du sens. :) Juste une chose de ce que j'ai vu la deuxième méthode est probablement Ajax.BeginForm (string actionName, string Controller, objet routeValues, options AjaxOptions, objet htmlAttributes) non? Pour la clarification de la réponse. Merci encore. –