#html #asp.net #asp.net-mvc #razor
#HTML #asp.net #asp.net-mvc #razor
Вопрос:
Я работаю с MVC, и у меня есть вопрос относительно вызова функции с моего контроллера.
Это функция, которую я хочу вызвать:
public ActionResult Index(string continent)
{
try
{
return View(db.Factories.ToList());
}
catch (Exception e)
{
string s = e.InnerException.Message;
}
return View( new FactoriesWController().GetFactoriesOnContinent(continent));
}
Я хочу вызвать эту функцию со cshtml
страницы, если быть точным, это выпадающий список.
Я хочу использовать изменение выбранного элемента для вызова функции и использовать выбранный элемент для параметра функции. Это выпадающий список кода Razor:
@Html.DropDownList("Region", new SelectList(new List<string>() {"Europe", "Asia", "North America", "South America", "Africa", "Australia", "World"}),
"Select Region",new { @class = "form-control" })
<input type="submit" />
Итак, я хочу использовать выбранный элемент из выпадающего списка, а затем вызвать функцию, используя выбранный элемент в качестве параметра. Я никогда не кодировал в HTML, любая помощь приветствуется.
Комментарии:
1. вы хотите перезагрузить страницу с ответом от этого метода действия?
2. Измените имя выпадающего списка, чтобы оно соответствовало имени параметра —
@Html.DropDownList("continent", ...)
и оберните формуFormMethod.Get
и отправьте форму или используйте ajax для отправки выбранного значения в метод, если вы хотите остаться на той же странице и обновить DOM3. @Shyju, — вы предупреждаете
.val()
о том<button>
, что, а не о<select>
том 🙂4. ДА. Вы правы @StephenMuecke Я не знал
val()
, возвращает текст при отсутствии значения. Видите, в этом прелесть участия в SO. Вы изучаете то или иное каждый божий день. Спасибо.5.@Shyju, а из спецификаций атрибут value предоставляет значение для элемента. Значение элемента option — это значение атрибута содержимого value, если таковой имеется, или, если его нет, значение атрибута text IDL элемента.
Ответ №1:
Поместите элементы формы (ВЫБЕРИТЕ и отправьте) внутри form
тега. action
Атрибут формы должен указывать на имя вашего метода действия. Переименуйте значение атрибута SELECT element name, чтобы оно соответствовало имени параметра вашего метода действия.
Вы можете использовать Html.BeginForm
для создания тега формы.
@using (Html.BeginForm("Index", "home"))
{
@Html.DropDownList("continent",
new SelectList(new List<string>()
{"Europe", "Asia", "North America", "South America", "Africa", "Australia", "World"}),
"Select Region",
new {@class = "form-control"})
<input type="submit"/>
}
Предполагая, что ваш Index
метод действия находится внутри HomeController
.
Теперь, когда пользователь выбирает опцию из элемента ВЫБОРА и нажимает кнопку отправки, выбор будет отправлен в метод действия Index, а выбранная опция будет доступна в continent
параметре.
Комментарии:
1.
Html.BeginForm("Index", "Home", FormMethod.Get)
2. Post также должен работать (даже если метод действия — GET action). Зачем указывать Get ?
3. У OP не было
[HttpPost]
, поэтому предположил, что это GET4. ДА. Но вы можете выполнить отправку формы типа POST в действие GET
5. @Shyju Спасибо за ваш ответ, он проснулся! Я не могу проголосовать, потому что моя репутация все еще ниже 15.