/ / ASP.Net MVC Model Binding Object Complex using GET - c #, javascript, asp.net-mvc, angularjs, model-binding

Objet complexe de liaison de modèle ASP.Net MVC utilisant GET - c #, javascript, asp.net-mvc, angularjs, liaison de modèle

J'ai une classe dans mon projet web:

public class MyClass
{
public int? Param1 { get; set; }
public int? Param2 { get; set; }
}

qui est un paramètre dans ma méthode de contrôleur:

public ActionResult TheControllerMethod(MyClass myParam)
{
//etc.
}

Si j'appelle la méthode à l'aide de POST, la liaison de modèle fonctionne automatiquement (j'utilise angulaire du côté js, ce qui n'a probablement pas d'importance):

$http({
method: "post",
url: controllerRoot + "TheControllerMethod",
data: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});

Si j'utilise un GET, le paramètre est toujours nul dans le contrôleur.

$http({
method: "get",
url: controllerRoot + "TheControllerMethod",
params: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});

La liaison de modèle complexe à l'aide du classeur de modèle par défaut ne fonctionne-t-elle que pour les POST, ou puis-je faire quelque chose pour que cela fonctionne avec un GET?

Réponses:

10 pour la réponse № 1

La réponse est oui. La différence entre les requêtes GET et POST est qu'un corps POST peut avoir un type de contenu afin qu'il puisse être interprété correctement côté serveur comme XML ou Json, etc. pour GET, tout ce que vous avez est juste une chaîne de requête.


8 pour la réponse № 2

Avec ASP.NET MVC, vous pouvez en effet lier votre modèle sur une demande GET, tant que vous avez les mêmes noms de paramètres de chaîne de requête que les noms de propriété de votre classe Model. Exemple de ceci répondre:

public class ViewModel
{
public string Name { set;get;}
public string Loc{ set;get;}
}

Vous pouvez faire une demande Get comme celle-ci

MyAction?Name=jon&Loc=America

et MVC liera automatiquement votre modèle:

[HttpGet]
public ViewResult MyAction(ViewModel model)
{
// Do stuff
return View("ViewName", model);
}

-2 pour la réponse № 3

Pourquoi appelez-vous la propriété "data" dans le POST et "params" dans le GET? Les deux devraient être appelés "données".

$http({
method: "get",
url: controllerRoot + "TheControllerMethod",
data: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});