#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, ...)