Passer du Modèle De Contrôleur à l'aide de Jquery/Ajax
Je suis en train de passer mon modèle d'un contrôleur à l'aide de JQuery/Ajax, je ne suis pas sûr de savoir comment le faire correctement. Jusqu'à présent j'ai essayé d'utiliser Url.Action
mais le modèle est vide.
Remarque: aucun des threads en double sur stackoverflow semblent adresse à l'aide de ASP.NET 5 MVC 6.
Vue:
$("#inpDateCompleted").change(function () {
var url = '@(Url.Action("IndexPartial", "DashBoard", Model, null))';
$("#DailyInvoiceItems").load(url);
});
Contrôleur:
[HttpGet]
public PartialViewResult IndexPartial(DashBoardViewModel m)
{
//Do stuff with my model
return PartialView("_IndexPartial");
}
C'est un peu pas clair ce que vous essayez de faire. Le 3e paramètre de votre
Cela ne ferait que passer le modèle d'origine (
Vous pouvez utiliser
C'est ce que
Eh bien cela signifie que vous devriez vraiment être à l'aide d'un modèle de vue (j'.e ne contenant que les propriétés dont vous avez besoin dans la vue), mais non, toutes les propriétés que vous exclure sera juste leur valeur par défaut dans la méthode.
Url.Action()
serait le modèle d'origine lors de la première généré le point de vue, et si votre modèle contient des propriétés qui sont des objets complexes ou de collection, il serait tout de toute façon ne.Cela ne ferait que passer le modèle d'origine (
Url.Action()
est rasoir code qui est interprété sur le serveur avant de son envoyé à la vue). Si votre seul vouloir envoyer la date sélectionnée à la méthode, utilisez $("#DailyInvoiceItems").load('@(Url.Action("IndexPartial", "DashBoard")', { date: $(yourdatecontrol).val()); });
et de modifier la méthode pour avoir un DateTime date
paramètre.Vous pouvez utiliser
$('form').serialize()
pour sérialiser tous les contrôles de formulaire. par exemple, $.post('@(Url.Action("IndexPartial", "DashBoard"),
$('form').serialize()`, function(data) { $("#DailyInvoiceItems").html(data); });C'est ce que
$('form').serialize()
fera. Votre DashBoardViewModel m
paramètre est correctement lié (en supposant que vous avez généré, vous les contrôles de formulaire correctement)Eh bien cela signifie que vous devriez vraiment être à l'aide d'un modèle de vue (j'.e ne contenant que les propriétés dont vous avez besoin dans la vue), mais non, toutes les propriétés que vous exclure sera juste leur valeur par défaut dans la méthode.
OriginalL'auteur Reafidy | 2015-11-26
Vous devez vous connecter pour publier un commentaire.
Ressemble votre
IndexPartial
méthode d'action a un argument qui est un objet complexe. Si vous êtes de passage dans un grand nombre de données (objet complexe), Il pourrait être une bonne idée de convertir votre méthode d'action pour uneHttpPost
méthode d'action et utiliser jQuerypost
pour publier des données. A limitation sur la valeur de chaîne de requête.Votre script doit être
En supposant
Name
etLocation
sont les propriétés de votreDashboardViewModel
classe etSomeDivToShowTheResult
est l'id d'une balise div dans votre page où vous souhaitez charger le contenu à venir de la partialview.L'envoi d'objets complexes?
Vous pouvez construire plus complexe de l'objet en js si vous le souhaitez. Modèle de liaison de travailler aussi longtemps que votre structure correspond à la classe viewmodel
Pour le js modèle à être transformé à votre paramètre de méthode, Votre point de Vue Modèle devrait ressembler à ceci.
Et dans votre méthode d'action, spécifiez
[FromBody]
Reafidy Voir la pleine mise en œuvre ci-dessous
Cool. Découvrez stackoverflow.com/a/20226220/40521 pour une explication plus détaillée sur le détachement des modèles de contrôleurs.
Est-il possible de jquery pour lire les paramètres du modèle à l'arrière de la PartialView une fois qu'il retourne? Par exemple, je veux créer un nouvel élément et de lire le nouveau Modèle de l'Id passé en arrière de la manette pour ajouter un autre élément du dom? Je sais que je pourrais inclure dans la vue partielle, mais si je veux l'Id d'un autre article sans rapport avec la vue partielle, mais avec cet id de l'élément?
OriginalL'auteur Shyju
Merci, en utilisant la var viewModel = { Id : 1, Madate:};' comment puis-je obtenir une valeur à partir d'une zone de texte sur la page dans la madate paramètre?
Désolé, j'étais sens comment puis-je obtenir une date à partir d'une zone de texte dans le viewModel paramètre?
J'ai essayé de le formater pour des raisons de lisibilité
Grande, et désolé - une dernier question, comment puis-je obtenir les résultats de la requête ajax pour charger dans le "#DailyInvoiceItems" DIV?
OriginalL'auteur Julius Depulla
Utilisation suivantes JS:
et le code suivant sur votre contrôleur:
Voici une explication complète de cette solution : transtatic.com/blog/2013/04/...
OriginalL'auteur kavita sharma
Comme suggéré dans d'autres réponses, il est probablement plus facile d'envoyer les données du formulaire au contrôleur. Si vous avez besoin de passer toute une/Modèle de Formulaire, vous pouvez facilement le faire avec
serialize()
par exemplePour votre contrôleur pourrait avoir un modèle de vue que le param par exemple
Sinon, si vous voulez juste pour poster des valeurs spécifiques que vous pouvez faire:
Avec un contrôleur comme:
OriginalL'auteur Rob