ASP.Net MVC mise à Jour ViewModel sur la liste Déroulante de Sélection changé

Au début, je suis tout à fait nouveaux sur le développement web. Je suis en train de développer une application Web qui consiste en une seule page (j'ai commencé avec un projet vide en essayant de suivre le modèle mvc).

Pour remplir mon point de Vue, je passe un ViewModel par le biais de mon contrôleur HomeController à mon "Home"Voir.

Maintenant, je veux changer un peu de l'Étiquette-Textes en fonction d'une liste Déroulante de sélection.

ViewModel:

public IEnumerable<Models.Language> AvailableLanguages;
public Models.Language SelectedLanguage
Public IEnumerable<Models.Text> Content;

Langue:

public int ID;
public string LanguageText;

Texte:

public Language Language;
public string Description;

HTML:
@modèle Viewmodel.MyViewModel

<div>
    @Html.DropDownFor(x => x.AvailableLanguages, 
    new SelectList(Model.AvailableLanguages, 
    "ID", 
    "LanguageText", 
    new {@onchange= ... })) 
</div>

<div>
    @{
        @:@Model.MyViewModel.Content
        .Where(o => o.Language.Equals(Model.SelectedLanguage)
        .First())
        .Description
     }
</div>

J'ai lu quelque chose à propos de cette "@onchange" attribut (Ajax, JQuery) - mais pour être honnête, Ce serait formidable s'il y aurait quelque ASP/MVC/HTML solution pour arriver à mon but de mettre à jour mon SelectedLanguage de la Propriété chaque fois que l'élément sélectionné de la liste déroulante est changé.

De plus: Est-il un tutoriel pour la création web (asp, html, ajax, jquery, js) que vous pouvez recommander?

Merci!

MODIFIER

Maintenant, j'ai essayé de mettre en œuvre le code fourni, mais il semble que rien ne se passe lors de la modification de l'élément sélectionné...

Script:

<div class="LanguageSelection">
        @{
            @Html.DropDownList("SelectedLanguage", new SelectList(Model.AvailableLanguages, "ID", "Description"))
            <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript">
                var url = '@Url.Action("ChangeLanguage", "Home")';
                $('#SelectedLanguage').change() {
                    $.getJSON(url, {
                        ID: $(this).val() 
                    }, function(response){
                        $('#Title').text(response.Title);   
                    });
                };
            </script>
        }
    </div>

JsonResult:

public JsonResult ChangeLanguage(int id) {
        var data = new {
            Title = HVM.Title.Where(o => o.Language.ID.Equals(id)).First(),
        };
        return Json(new { success = true });
    }

Le problème doit être situé quelque part dans le script, l'ChangeLanguage Méthode n'est pas encore exécutée.

Avez-vous essayé le javascript/jquery solution?
Un peu moins clair, exactement ce que vous voulez faire. Vous ne pouvez pas lier un dropdownlist à un objet complexe (IEnumerable<Models.Language>). Si vous souhaitez identifier la langue sélectionnée sur le post de retour, vous avez besoin d'une propriété de se lier à (dire int SelectedLanguage { get; set; }) et puis @Html.DropDownFor(x => x.SelectedLanguage, new SelectList(Model.AvailableLanguages ...).
La deuxième partie de votre point de vue n'a pas de sens. Rasoir code est analysé sur le serveur avant est envoyé à la vue, de sorte MyViewModel.Content ci ne serait jamais que la valeur initiale de la SelectedLanguage. Si vous souhaitez mettre à jour quelque chose dans les DOM en fonction de la langue sélectionnée, alors vous devez utiliser l'ajax pour appeler un contrôleur, en passant la langue sélectionnée et le retour de la de nouvelles de nouvelles valeurs que vous souhaitez afficher. Notez également que vos modèles seulement ont des champs (pas de get/set) donc rien ne lie, lorsque vous postez en arrière.
C'est pourquoi j'ai dit que je suis assez nouveau sur le web dans le secteur du développement. Donc vous voulez dire il n'y a aucun moyen de lier un SelectedValue à une Liste<object> sans l'aide de technologies de pointe telles que l'ajax? Si oui, pourriez-vous recommander quelques tutoriels?
Vous pouvez lier une dropown à un type de valeur (int, string etc), mais pas à un objet complexe (un <select> enregistre une valeur unique et n'a aucun concept de ce que IEnumerable<Language> est. Si vous expliquer ce que c'est que vous voulez faire (c'est à dire quel est le but de la manipulation de la .change cas), je peux vous donner une réponse.

OriginalL'auteur C4p741nZ | 2015-03-25