J'ai une application de base ASP.NET qui nécessite le passage d'un modèle d'une action à une autre.
Ce sont des modèles: p> et le contrôleur post: p> dans la TestAction 1 Tout en débogage, je vois que l'ID, le nom et les marques ont une valeur. P> Je reçois la valeur pour ID dans Testace2 que dans Testage1. Cependant, la valeur des marques d'objet complexes n'est pas obtenue dans la méthode d'action TESTRACT22. P> Quelles sont mes autres options? P> p>
4 Réponses :
Je pense que le problème est que vous devez utiliser: (vous avez fait cela sans retour code>) p> p> p>
Le compilateur ne montrerait-il pas une erreur si vous écrivez uniquement redirectToaction code> sans retour?
Je pense que vous obtenez des modèles et des routres mélangés. La surcharge de la redirecture que vous appelez (prend une chaîne et un objet) attend un argument de routévalues, pas un argument de modèle. HTTPS: // docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirectToaction?view=aspnetcore-2.2 P>
Testager1 est appelé via Post, mais TestAction2 est appelée via GET. Vous devez travailler une URL qui vous permettra d'appeler TestAction2 comme vous le souhaitez (indépendamment de la redirection dans Testage1). Je suppose que cela impliquera la mise en place d'une route personnalisée. Une fois que vous avez une URL qui vous permettra d'appeler TestAction2 comme vous le souhaitez, vous pouvez spécifier les valeurs d'itinéraire pour former cette URL dans la redirection dans Testager1. P>
Vous ne pouvez pas rediriger avec un modèle. Une redirection est simplement une réponse vide avec un code d'état 301, 302 ou 307 et un en-tête code> Emplacement code>. Cet en-tête code> Emplacement code> contient l'URL que vous souhaitez rediriger le client. P>
Le client em> doit ensuite faire une nouvelle demande à cette URL dans l'en-tête, si elle choisit em>. Les navigateurs le feront automatiquement, mais tous les clients HTTP ne le seront pas. Il est important de noter que cette nouvelle demande est faite via un get et obtenir des demandes ne disposent pas de corps. (Techniquement, la spécification HTTP le permet, mais aucun navigateur ou client HTTP ne supporte réellement cela.) P>
On ne sait pas ce que votre objectif ultime est ici, mais si vous devez persister les données temporairement entre les demandes (telles qu'une redirection), vous devez ensuite sérialiser ces données dans une touche TEMPDATA CODE>. P >
Vous pouvez utiliser Contrôleur: P> templdata code> pour passer des données de modèle à une demande de redirection dans
ASP.NET CORE CODE> dans ASP.NET CORE, vous ne pouvez pas passer des types complexes dans Templdata. Vous pouvez transmettre des types simples tels que String, INT, GUID, etc. Si vous souhaitez passer un objet de type complexe via
templdata code>, vous pouvez sérialiser votre objet à une chaîne et à passer cela. J'ai fabriqué une application de test simple qui suffira à vos besoins:
public class ClassA
{
public ClassA()
{
Marks = new StudentMarks();
}
public string Id { get; set; }
public string Name { get; set; }
public StudentMarks Marks { get; set; }
}
public class StudentMarks
{
public int Marks { get; set; }
public string Grade { get; set; }
}
Peut-être essayer
redirecttoaction ("Testager2", nouveau {modèle = modèle}); code>
Il y a peut-être des pointeurs ici: Stackoverflow.com/Questtions/22505674/...
@Izzy j'ai essayé ça aussi, même résultat.
Qu'en est-il d'un simple
Testace de retour2 (modèle) code> plutôt que d'un
redirecttoaction code>. Vous pouvez également utiliser
tempdata code>
Petit point, mais si votre classe de classe d'une classe n'a pas eu d'échantillons de dessinités de type «Studymarks». Sinon, alors quels sont les marques?
@ SR28 Ouais merci. J'essayais de reproduire une version simplifiée de ma classe et j'ai gâché.
Une redirection comme celle-là sera toujours une demande de choix; Pouvez-vous montrer l'URL complète que la redirection pointera-t-elle? Vous devriez être capable d'inspecter que via le navigateur.
Alors que le débogage,
marques code> sont présents dans
Testager1 code> avant
redirecttoaction code>?
@Gonzalolorieto Oui. C'est pourquoi je ne comprends pas pourquoi ça va null.
Jetez un coup d'œil ici, des problèmes liés à un modèle complexe: Github.com/aspnet/MVC/issues/5093
Découvrez @chris Pratt répondre