Изменена опция ViewModel для обновления ASP.NET MVC в DropDown

Сначала я абсолютно новый в веб-разработке. Я пытаюсь разработать веб-приложение, состоящее из одной страницы (я начал с пустого проекта, пытающегося следовать шаблону mvc).

Чтобы заполнить мой просмотр, я передаю ViewModel через мой HomeController в свой «Домашний» вид.

Теперь я хочу изменить несколько меток-меток в зависимости от выбора DropDown.

ViewModel:

public IEnumerable AvailableLanguages; public Models.Language SelectedLanguage Public IEnumerable Content; 

Язык:

 public int ID; public string LanguageText; 

Текст:

 public Language Language; public string Description; 

HTML: @model ViewModels.MyViewModel

 
@Html.DropDownFor(x => x.AvailableLanguages, new SelectList(Model.AvailableLanguages, "ID", "LanguageText", new {@onchange= ... }))
@{ @:@Model.MyViewModel.Content .Where(o => o.Language.Equals(Model.SelectedLanguage) .First()) .Description }

Я читал что-то об этом атрибуте «@change» (Ajax, JQuery), но, если честно, было бы здорово, если бы было какое-то решение ASP / MVC / HTML для достижения моей цели – обновить свойство SelectedLanguage каждый раз, когда выбранный элемент выпадающего списка.

Дополнительно: Есть ли учебник для webdevelopment (asp, html, ajax, jquery, js), который вы можете порекомендовать?

Thanx!

РЕДАКТИРОВАТЬ

Теперь я попытался реализовать предоставленный код, но кажется, что ничего не происходит при изменении выбранного элемента …

Автор сценария:

 
@{ @Html.DropDownList("SelectedLanguage", new SelectList(Model.AvailableLanguages, "ID", "Description")) var url = '@Url.Action("ChangeLanguage", "Home")'; $('#SelectedLanguage').change() { $.getJSON(url, { ID: $(this).val() }, function(response){ $('#Title').text(response.Title); }); }; }

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 }); } 

Проблема должна быть расположена где-то в скрипте, метод ChangeLanguage даже не выполняется.

Из комментариев вы хотите иметь возможность обновлять метки на основе выбранного языка. Для этого вам нужно будет использовать ajax для публикации выбранного языка на метод controllerа, который возвращает json и обновляет DOM. Ваша модель просмотра должна быть

 public SelectList AvailableLanguages { get; set; } public int SelectedLanguage { get; set; } 

и в controllerе

 public ActionResult YourMethod() { var model = new yourModel(); model.SelectedLanguage = // set this if you want a default var availableLanguages = // get you list of languages model.AvailableLanguages = new SelectList(availableLanguages, "ID", "LanguageText") return View(model); } 

Посмотреть

 @Html.DropDownListFor(m => m.SelectedLanguage, Model.AvailableLanguages)  

И метод получения меток на основе выбранного языка

 public JsonResult GetLanguageLabels(int ID) { // Build a object of label values based on the selected language ID var data = new { Label1 = someValue, Label2 = anotherValue, .... }; return Json(data, JsonRequestBehavior.AllowGet); } 

Замечание: некоторые проблемы с вашим текущим кодом. (1) В ваших моделях есть только поля, а не свойства (нет get / set), поэтому ничто не будет связано с сообщением назад. (2) Вы не можете привязать элемент управления html к сложному объекту (только тип значения, или в случае , массив типов значений).

Вы должны убедиться, что элементы находятся в форме и просто, а имя функции после onchange …

 @onchange="submitdata();" 

Затем вы добавите скрипт.

 function submitdata() { $('form').submit(); } 

Для более «MVC» подхода вы должны начать с строго типизированного представления с использованием модели.

 @model My.Path.To.Model 

Вы также можете обернуть данные формы на странице бритвы с помощью …

 using (@Html.BeginForm("myMethod", "Home", FormMethod.Post)){ //form and inputs here, ect 
//properties bound to inputs to change your model, or html helpers like display for...
}

Затем вы передадите модель в качестве параметра в действие Controller, это вызывается при отправке формы:

 [HttpPost] public FileStreamResult myMethod(Model model) { string str = model.imapropertyonthemodel; } 

Если вы новичок в MVC, я бы посоветовал начать с основ из школ W3 , или если у вас есть множественная оценка, там есть отличные уроки.