/ / ASP.Net Oggetto complesso vincolante modello MVC usando GET - c #, javascript, asp.net-mvc, angularjs, associazione modello

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

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 № 1

La 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.");
});