Comment utiliser le Html.Raw(Json.Coder(Modèle)) correctement?
Je suis en train de Coder mon Modèle MVC avec le code suivant, mais le message d'alerte me donne une valeur null. Je ne sais pas pourquoi il me donne une valeur null parce que c'est une création de formulaire. Je suis en train de créer un modèle à partir de cela et mon Code html a le look ci-dessous:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Customer</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" id="submit" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
<script type="text/javascript">
$(document).ready(function () {
$('#submit').click(function () {
var JsonModel = '@Html.Raw(Json.Encode(@Model))';
alert(JsonModel); //json as string
var model = JSON.parse(JsonModel); //will give json
alert(model);
$.ajax({
type: "POST",
url: "../Home/Index",
data: {"cus" : model},
success: function(data){
alert("done");
},
error:function(){
alert("Error!!!!");
}
});
});
});
</script>
}
- Ce processus est une douleur dans le cul et peut facilement être évité à l'aide de cette méthode qui va encoder votre forme MVC comprend, de sorte qu'il peut convertir implicitement le retour à votre type de modèle.
- merci !!! je vais jeter un oeil.....
Vous devez vous connecter pour publier un commentaire.
Ma réponse ici montre (dans le JQuery section) la façon dont vous pouvez vous déplacer à l'aide de
Json.Encode
tout à fait.L'idée de base c'est que, en utilisant une fonction jQuery, vous pouvez construire un objet JSON, qui MVC sera en mesure d'analyser dans un modèle de données, en dehors de toute forme.
La fonction est la suivante:
Dans votre cas, votre AJAX deviendrait
Si vous avez des difficultés à obtenir
$('form')
de travail, peut-être si vous avez de nombreuses formes sur la même page, l'utilisation de classes ou Id pour identifier vos formes.Elle retourne null, car il est null. Les données que l'utilisateur va entrer éventuellement dans le formulaire n'est pas disponible au moment où la page est rendu (et votre appel à
Json.Encode(Model)
pistes). Des choses comme JavaScript exécuté côté client, alors que tous le Rasoir choses s'exécute côté serveur avant d'être envoyé au client. Si vous voulez obtenir les données saisies par l'utilisateur à partir de la forme pour une utilisation dans votre appel AJAX, alors vous devez faire comme @Bec suggère, et de la récupérer via JavaScript:Aussi, dans le cas où vous avez besoin pour réellement coder le modèle lors du rendu (peut-être pour une utilisation avec quelque chose comme knock-out), vous n'avez pas besoin de le définir comme une chaîne, puis analyser la chaîne. Suffit de le définir comme un régulier objet JavaScript. C'est tout JSON est de toute façon:
Cet exemple, encoder un modèle (qui est un
List<My>
) et de la POSTER sur une action comme un objet Json nommé modèle.