2010-01-19 3 views
2

J'ai une liste déroulante sur mon gabarit qui doit être publiée après avoir été modifiée. Après la publication, quelle que soit la page initiée, la publication doit être ré-affichée.Afficher la page maître et le post-retour

Ma question est où dois-je gérer cela? Évidemment, je ne veux pas avoir à modifier toutes les actions de mon projet ... Je pense que peut-être postback à une autre action fixe et que cette action rediriger vers la page qui est le référant. Ai-je raison? Des pensées?

Merci.

Jason

+0

On dirait que vous devez simuler des formulaires Web dans MVC. Pourquoi n'utilisez-vous pas Web Forms en premier lieu. –

+0

Il pourrait juste être confus sur la façon dont cela fonctionne dans MVC. –

+0

Non, je comprends les différences. Le site est en cours de développement. Dans ce cas particulier, j'ai une liste déroulante sur chaque page qui permet au développeur et au testeur de basculer entre un mode "Admin" et un mode "Utilisateur". Lorsque vous sélectionnez la liste déroulante, la page doit être actualisée avec la nouvelle vue basée sur le nouveau rôle sélectionné. – Jason

Répondre

1

Dans Site.Master, j'ai fini par encapsuler la liste déroulante dans son propre formulaire qui renvoyait à un contrôleur/action dédié.

<% Using Html.BeginForm("ChangeRole", "Home")%> 
    <div id="roleSelector">Change Role: <%=Html.DropDownList("Role", DirectCast(ViewData.Item("Roles"), SelectList), New With {.onchange = "this.form.submit();"})%></div> 
<% End Using%> 

Dans le contrôleur, j'ai utilisé le code suivant pour modifier le mode, puis redirigé vers l'URL de référence. Je ne suis pas sûr si c'est la manière recommandée mais j'ai été incapable de penser à une autre solution.

+0

Salut, maintenant, 4 ans plus tard, je me posais la même question avec le même type de scénario. Je pourrais aussi seulement proposer cette mise en œuvre technique qui a semblé un peu directe, et j'étais heureux que vous ayez eu la même idée. – Michel

0

Lorsque vous publiez retour dans la liste déroulante changer ce que vous faites? Pouvez-vous gérer cela dans un appel jQuery, éliminant ainsi la nécessité de ré-afficher la page?

+0

J'utilise jQuery et ajax dans d'autres parties du site, mais dans ce cas il doit s'agir d'une publication. En substance, la liste déroulante agit comme une bascule entre plusieurs rôles différents ("Admin", "Utilisateur", "Développeur") qui modifie complètement la vue de la page. – Jason

0

Les appels à l'action Les méthodes peuvent être asynchrones, comme l'indique griegs. Vous pouvez ainsi publier toute l'information dont vous avez besoin à partir des boutons radio sans avoir à recharger la page.

Si vous devez mettre à jour une partie de la page, vous pouvez la remplacer par le contenu d'une méthode d'action rendue. Si vous utilisez les méthodes jQuery ajax, vous pouvez publier des informations spécifiques sur vos méthodes.

Par exemple, quelque chose comme ceci:

$(document).ready(function() 
{ 
    $("#myRadioButton").change(function() 
    { 
     //Post to your action method, with the value of the radio button, function to call on success 
     $.post('yourActionMethodUrl', $(this).val(), function() 
     { 
      //Update some part of the page 
     }); 
    }); 
}); 

Ceci est basé sur la mémoire, de sorte que vous devrez peut-être vérifier la syntaxe.

Questions connexes