Je viens d'un fond d'application plus WPF
et je suis habitué à des liaisons et autres. Sauter dans des sites Web peut alors venir avec ses problèmes car ils travaillent beaucoup plus différemment.Ajax simple dans asp.net MVC 3, mettre à jour le modèle et la partie du rerender
J'essaie de faire une action simple Ajax
mais je ne sais pas par où commencer. Fondamentalement, je veux faire une liste déroulante qui modifie une propriété sur le modèle et rend à nouveau cette partie de la page. Peut-être que c'est trop une manière de WPF pour faire ceci afin que mon modèle puisse être tordu pour la chose qu'il est censé faire.
Voici ce que je suis déjà:
public class TheViewModel
{
private IEnumerable<TheData> _data;
public TheViewModel(IEnumerable<TheData> data)
{
_data = data;
Year = 2012;
}
public int Year { get; set; }
public ICollection<TheData> Data
{
get
{
return _data.Where(d => d.Year == this.Year).ToList();
}
}
public IEnumerable<SelectListItem> YearList
{
// lists the available years
}
}
public class TheData
{
public int Year { get; set; }
//Some more info I want to represent in Table
}
Et le rasoir:
@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "thetable" }))
{
@Html.DropDownListFor(model => model.Year, Model.YearList, new { AutoPostBack = "true"})
<input type="submit" name="name" value="Submit" />
}
<table id="thetable">
<thead>
//some headers
</thead>
<tbody>
@foreach (var item in Model.Data)
{
//row for each data
}
</tbody>
</table>
Comme vous pouvez le voir, je suis l'espoir de la propriété Année être mis à jour et un nouvel appel à être fait pour la propriété de données qui entraînerait de nouvelles informations. Cette information sera affichée en thetable
Tableau
Ok merci, voilà ce que je avais besoin. À partir de votre solution, j'ai décidé de séparer en 2 modèles avec des informations en dehors de la mise à jour dans un et la mise à jour dans un autre. Problème il y a le réglage des données par défaut. Html.Partial signifierait que je devrais inclure l'autre viewmodel avec le paramètre par défaut dans l'autre. J'espérais donc pouvoir simplement appeler Html.Action à la place, mais je ne sais pas trop comment l'appeler au lieu de l'obtenir. –
Eh bien un autre problème est que DropDownList est forcé d'être à l'intérieur de partialView en raison du style. Ça marche la première fois mais pas encore. –
@ IngóVals, dans ce cas vous devriez utiliser '.delegate' ou' .on (dans jQuery 1.7+) au lieu de '.change' pour vous abonner à l'événement change de la liste déroulante si ce ddl est ajouté par la suite dans le DOM en utilisant AJAX par exemple. –