Ho un corso nel mio progetto web:
public class MyClass
{
public int? Param1 { get; set; }
public int? Param2 { get; set; }
}
che è un parametro nel mio metodo controller:
public ActionResult TheControllerMethod(MyClass myParam)
{
//etc.
}
Se chiamo il metodo usando POST, l'associazione del modello funziona automaticamente (uso angolare sul lato js, che probabilmente non ha importanza):
$http({
method: "post",
url: controllerRoot + "TheControllerMethod",
data: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});
Se uso un GET, il parametro è sempre nullo nel controller.
$http({
method: "get",
url: controllerRoot + "TheControllerMethod",
params: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});
L'associazione di modelli complessi che utilizza il raccoglitore di modelli predefinito funziona solo con i POST o c'è qualcosa che posso fare per farlo funzionare con un GET?
risposte:
10 per risposta № 1La risposta è si. La differenza tra le richieste GET e POST è che un corpo POST può avere un tipo di contenuto in modo che possano essere interpretati correttamente sul lato server come XML o Json, ecc. per GET, tutto ciò che hai è solo una stringa di querystring.
8 per risposta № 2
Con ASP.NET MVC puoi davvero associare il tuo modello a una richiesta GET, purché si disponga degli stessi nomi dei parametri della stringa di query dei nomi delle proprietà della classe Model. Esempio da questo risposta:
public class ViewModel
{
public string Name { set;get;}
public string Loc{ set;get;}
}
Puoi fare una richiesta Get come questa
MyAction?Name=jon&Loc=America
e MVC assocerà automaticamente il tuo modello:
[HttpGet]
public ViewResult MyAction(ViewModel model)
{
// Do stuff
return View("ViewName", model);
}
-2 per risposta № 3
Perché chiamate la proprietà "data" nel POST e "params" nel GET? Entrambi dovrebbero essere chiamati "dati".
$http({
method: "get",
url: controllerRoot + "TheControllerMethod",
data: {
myParam: myParam
}
}).success(function (data) {
callback(data);
}).error(function () {
alert("Error getting my stuff.");
});