2012-07-05 10 views
1

Je souhaite recevoir un objet json de la vue au contrôleur en utilisant la méthode $ .ajax mais je ne sais pas pourquoi l'objet de réception dans le contrôleur affiche des données nulles.

Voici mon code.

$("#Save").click(function (e) { 

     $.ajax({ url: "Home/Save", 
     type: "POST", 
     datatype:'json',     
     data: ({movies:movies}) 
     }); 
}); 

où les films est le javascript tableau qui contient

({ 
    Name:"DDLJ",Stars:"SRK",Director:"Yashraj",Year:"2012" 
    }, {Name:"K3G",Stars:"SRK",Director:"Karan",Year:"2010"} 
) 

et mon code de contrôleur est:

public string Save (List<MovieDB> movies) 
     { 
     return ""; 
     } 

où MovieDB est ma classe de modèle qui ont les propriétés

public class MoviesDB 
    { 
     //public int MoviesID { get; set; } 
     public string Name { get; set; } 
     public string Stars { get; set; } 
     public string Director { get; set; } 
     public DateTime Year { get; set; } 
    } 

Se il vous plaît su Ggest moi une meilleure façon de recevoir des données JSON de la vue au contrôleur.

actully J'essaie d'envoyer javascript objet tableau de la vue à la méthode d'action du contrôleur dans lequel mon code de tableau est

<script type="text/javascript"> 
    var cnt = 1; 
     var cnt2 = 1; 
     var i; 
     var movies = []; 

    movies.push({ Name: $("#txtMovieName").val(), Stars: $("#txtStarCasts").val(), Director: $("#txtDirector").val(), Year: $("#txtYear").val(), Index: cnt++ }); 

        $("#modelTable").empty(); 

        $("#modelTemplate").tmpl(movies).appendTo($("#modelTable")); 

        $("#txtMovieName").val(""); 
        $("#txtStarCasts").val(""); 
        $("#txtDirector").val(""); 
        $("#txtYear").val(""); 
        $("#txtMovieName").focus(); 
        e.preventDefault(); 
      }); 

    $("#Save").click(function (e) { 

      //var jm = $.toJSON(movies); 
      $.ajax({ url: "Home/Save", 
       type: "POST", 

       data: ({movies:movies}) 
       // contentType: 'application/json; charset=utf-8' 
      }); 
     }); 

    </script> 

Maintenant, je veux envoyer que les films javascript objet tableau à Save() Méthode d'action du contrôleur à l'aide de toute façon comme json ou autre s'il vous plaît me suggérer quelque chose ...

+0

J'ai déjà posté une réponse, mais quand j'ai relu votre question, je pense que ma réponse n'est pas correcte. Obtenez-vous les données de votre vue à votre contrôleur après une soumission? Parce que c'est très facile de résoudre votre question. – Sllix

Répondre

0
List<xyztype> lstid = new JavaScriptSerializer().Deserialize<List<xyztype>>(IDlist); 

travaille pour moi

ici xyztype est mon type de classe de collection et idlist est mon JSON objectstring de la vue au contrôleur méthode d'action

en utilisant JavaScriptSerializer(). Désérialiseur <> nous pouvons convertir chaîne JSON à notre objet ou type de données personnalisée du système

par exemple:

List<string> lstid = new JavaScriptSerializer().Deserialize<List<string>>(IDlist); 
1

Ce n'est pas un bon json. Vous pouvez vérifier cela sur JSONLint

Voici le JSON correct:

[ 
    { 
     "Name": "DDLJ", 
     "Stars": "SRK", 
     "Director": "Yashraj", 
     "Year": "2012" 
    }, 
    { 
     "Name": "K3G", 
     "Stars": "SRK", 
     "Director": "Karan", 
     "Year": "2010" 
    } 
] 

S'il y a encore des erreurs, laissez-moi savoir.

0

Peut-être que c'est une meilleure réponse, si vous voulez obtenir vos données dans votre contrôleur après une publication.

//For going to your view. 
public ActionResult Create() 
{ 
    MoviesDB model = new MoviesDB(); 
    return View("Create", model); 
} 


[HttpPost] 
public ActionResult Create(MoviesDB model) 
{ 
    if (ModelState.IsValid) 
    { 
     //Here you can use your model param 
     //with the filled in values of your view. 

     return RedirectToAction("Index"); 
     //when everything works fine, go to this view. 
    } 
    else 
    { 
     return RedirectToAction("Index"); 
     //when there is a problem, go to this view. 
    } 

    return View("Index"); 
} 

Vous n'avez pas besoin de jQuery pour utiliser vos données depuis votre vue.

Questions connexes