Archives de Tag: MVC

Création de clé primaire composé en MVC3

Vous avez une table jointe, voiçi comment déclarer les clé primaires composé en MVC3.

Il suffit de les définir dans le Context comme ceçi :

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<RencontreClass>().HasKey(t => new { t.UserId, t.ClientId });
}

Source

Utilisation d’Ajax en MVC Razor

En MVC3 Razor, pour avoir un petit peu d’événementiel dans les pages, vous allez être obligé de passé par les fonctions JavaScript et notamment Ajax pour interagir avec vos controllers.

D’abord un cas simple (1 variable en entrée, 1 variable en sortie):
Controller

[HttpPost]
public string MyFonction(int myVar = 0)
{
    // ...
    String sView = "Halo";
    return sView;
}

View

function toto(){
    $.ajax({
        type: "POST",
        url: '@Url.Action("MyFonction")',
        data: '{myVar : @Model.Foo}',
        success: function (result){
            // ...
        },
        error: function (req, status, error) {
            // ...
        }
    });
}

La partie « error » n’est pas obligatoire, mais pour tester une première fois, ça peut-être utile.

Et maintenant corsons un peu les choses avec plusieurs variables en entrée :
Controller
Côté controller c’est du classique avec :

[HttpGet]
public ActionResult MyFonction2(int myVar1, string myVar2, DateTime myVar3)
{
    // ...
    return Json(result, JsonRequestBehavior.AllowGet);
}

View
Côté Vue, on va passé par du JSON pour transmettre toutes les informations.

function tata() {
    var strJson = {
        myVar1: $(foo).val(),
        myVar2: $(bar).val(),
        myVar3: $(baz).val()
    };

    $.ajax({
        type: "GET",
        url: '@Url.Action("MyFonction2")',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        data: strJson,
        success: function (result) {
            // ...
        }
    });
}

Si vous souhaitez retourner à la vue plusieurs valeur, je vous conseillerai de passé par un tableau et de l’utiliser de manière standard (result[0]…).

UPDATE 25/10/2012

IE (dans ses versions 7 et 8) est un navigateur ultra agressif avec le cache en Ajax. Si vous posez une question avec les mêmes paramètres d’entrée, il considèrera qu’il possède déjà la réponse. Vous avez donc 2 possibilités, rajouter un paramètres aléatoire à la fin (c’est pas très propre) ou alors rajouter parmi les options de la commande AJAX:

cache : false,