Получаем значение Html.DropDownList

#c# #asp.net-mvc #razor

#c# #asp.net-mvc #razor

Вопрос:

В настоящее время у меня есть следующий код в одном из моих Razor view в проекте MVC: <b>Item Code: </b>@Html.DropDownList("ItemID", (SelectList)ViewBag.Items)

Я хотел бы получить доступ к значению выпадающего списка позже в @Ajax.ActionLink представлении Razor. Есть ли способ получить доступ к значению выпадающего списка в представлении?

Комментарии:

1. Вы имеете в виду выбранное значение? Если нет, то у вас уже есть свои значения (SelectList)ViewBag.Items

2. Да, выбранное значение.

3. Пользователь может изменить значение, поэтому вы должны управлять им с помощью JS

Ответ №1:

Используйте jQuery для получения текущего выбранного значения —

 $('#dropDownId').val();
  

Ответ №2:

Если у вас нет специальной библиотеки (например, jQuery) для работы с вашими элементами DOM, вы можете использовать ванильный Javascript в соответствии со следующим примером:

 //get the element by its ID value    
var dropdownElement = document.getElementById("ddlItems");

// now we have a reference to the dropdown field, let's read the selected value (or text):    
// 1- selected value
var selectedValue = dropdownElement.options[dropdownElement.selectedIndex].value;

// 2- selected text
var selectedText = dropdownElement.options[dropdownElement.selectedIndex].text;

// display a popup with selected text and value
window.alert("selected value is: ("   selectedValue   "), and selected text is: ("   selectedText   ").");  
 <select id="ddlItems">
  <option value="1">1st item</option>
  <option value="2">2nd item</option>
  <option value="3" selected="selected">3rd item</option>
</select>  

Ответ №3:

Если я правильно понимаю вашу проблему, вы пытаетесь передать выбранное значение из DropDownList помощника в @Ajax.ActionLink helper из представления, что невозможно, поскольку @Ajax.ActionLink helper обрабатывается и отображается на стороне сервера перед отправкой в браузер.

Вместо этого вы можете использовать @Html.ActionLink помощник без routeValues параметра и установить id атрибут этого тега привязки:

 @Html.ActionLink("Get Item", "TargetAction", "TargetController", null, new { id = "link" })
  

Затем используем ненавязчивый AJAX для обработки click события этой ссылки и передаем туда выбранное значение из выпадающего элемента:

 $('#link').click(function(e) {
    e.preventDefault();

    // get selected value from dropdownlist
    var selected = $('#ItemID').val();

    $.ajax({
        type: 'GET',
        url: this.href,
        data: { id: selected }, // action parameter with selected value
        cache: false, // disable caching
        success: function (result) {
            // do something to target DOM
        }
    });

    return false;
});
  

Дополнительные примечания:

1) Убедитесь, что параметр (ы), переданный в data настройку, точно совпадает с параметром (ами) в целевом действии контроллера, на которое указывает href атрибут ссылки.

 public ActionResult TargetAction(int id)
{
    // do something 
}
  

2) Вы можете использовать строго типизированную версию DropDownList , т.е. DropDownListFor для привязки свойства viewmodel.

 @Html.DropDownListFor(model => model.ItemID, ViewBag.Items as SelectList, ...)