Domanda

Credo di fraintendere qualcosa su MVC. Sto cercando di fare quanto segue:

public class ControllerA : Controller
{
    public ActionResult Index()
    {
        // do code

        // perform action on ControllerB - something like:
        // RedirectToAction("Action", "ControllerB");

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

Ovviamente RedirectToAction("Action", "ControllerB"); non funziona. Allora, come posso fare? Credo che avrei potuto avere tutti i controller che devono utilizzare azione) ereditare (da ControllerB ma che si sente davvero un brutto modo di farlo. Si prega di aiuto!

È stato utile?

Soluzione

È necessario restituire l'ActionResult da RedirectToAction ()

return RedirectToAction("Action", "ControllerB");

è ciò che devi fare se si vuole RedirectToAction effettivamente reindirizzare ad un'azione. Dopo aver chiarito che cosa "non funziona" significa per voi penso che si dovrebbe solo avere tutti i controller ereditano da una base. Questo è un approccio piuttosto standard.

public class ControllerA : ControllerB
{
    public ActionResult Index()
    {
        // do code

        Action();

        // CARRY ON with more code
    }
}

public class ControllerB : Controller
{
    public void Action()
    {
        // do code
    }
}

Altri suggerimenti

Credo che il controller che si sta eseguendo è un'istanza della classe in modo che avrebbe bisogno di fare un'istanza di controllo B per essere in grado di eseguire qualsiasi cosa su di esso, in modo da ciò che si sta cercando di fare non solo non sarà in realtà lavoro senza un hack.

Credo però v'è 2 metodi per ottenere i risultati migliori Penso che stai cercando:

1) Fare una classe 'ControllerBase' e hanno tutti i controller ereditano da essa invece che da 'Controller' quindi il codice qualsiasi condiviso è possibile aggiungere alla classe di base (come un metodo statico forse) e quindi tutti i regolatori possano accedervi come un bel membro e facile.

2) Come MVC farà una verso l'alto DLL è possibile aggiungere in nuove classi di cui hai bisogno, ad esempio, aggiungere una nuova cartella di progetto come 'Globals' aggiungere un nuovo file di classe denominato 'funcs' e ci si dispone di un lib statica si può accedere da qualsiasi luogo, Funcs.SendEmail (); etc

Se io sono fuori l'ok segno! felice di codifica comunque eh

Ho iniettato controllori con un metodo factory dalla fabbrica controllore come delegato (Func CreateController), e utilizzato che per creare sub-controller, come in questa circostanza. C'è un sacco di modi per raggiungere il tuo obiettivo, ma penso che potrebbe essere modo rapido per ottenere ciò che si desidera lavorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top