2009-06-23 10 views
6

J'ai un partiel qui est utilisé dans plusieurs vues. Le partiel contient des formes. L'action quand un formulaire est soumis est toujours la même, mais le contrôleur qui contient l'action dépend de la vue.Utilisation de Html.BeginForm pour publier sur le contrôleur en cours

Disons que je contrôleurs qui ont chacun une ActOnChoosenPerson d'action:

FireStaffController

HireStaffController

j'ai une

partielle

PersonList.ascx

Les formes sont rendues sous la forme

Html.BeginForm ("FireStaffController" "ActOnChoosenPerson") ou

Html.BeginForm ("HireStaffController" "ActOnChoosenPerson")

Quel est un bon moyen de se débarrasser du paramètre du contrôleur? En ce moment, je passe le nom du contrôleur de courant dans le modèle et utiliser

Html.BeginForm (Model.CurrentController, « ActOnChoosenPerson »)

mais qui est un peu gênant.

Répondre

8

Ce code sera toujours donner votre contrôleur actuel

<%=(Url.RequestContext.RouteData.GetRequiredString("Controller")) %> 

Il est évident que vous pouvez l'utiliser sans <% = comme celui-ci

Html.BeginForm(
    Url.RequestContext.RouteData.GetRequiredString("Controller")) , 
    "ActOnChoosenPerson") 

Il semble plus maladroit mais votre modèle ne devrait pas avoir besoin de savoir quel contrôleur l'appelle.

+0

Le cas de la valeur retournée varie avec ce qui était dans l'url dans certains cas. –

6

La propriété RouteData de ViewContext contient les noms du contrôleur et de l'action en cours. Vous pouvez les utiliser comme ceci:

Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData. 
    GetRequiredString("controller")) 
+0

Joli, me battre de 36 secondes. :) –

+0

Je préfère cette méthode, mais notez que vous avez le contrôleur et les paramètres d'action dans le mauvais ordre, et que l'indexeur RouteDate.Values ​​renvoie un objet qui n'est pas une chaîne et qui a donc besoin d'un cast. – fearofawhackplanet

+0

@fearofawhackplanet: Merci! J'ai permuté des paramètres et ai également changé la propriété de Values ​​en méthode GetRequiredString. –

0

La méthode la plus simple consiste simplement à appeler BeginForm() sans paramètre.

Questions connexes