У меня проблемы с использованием маршрутизации атрибутов в ASP.NET MVC 5. Вот действие, которое я использую в своем контроллере:
[HttpGet,Route("Home/ChangeID/{MovieInput}")]
public ActionResult ChangeID(int MovieInput)
{
return View();
}
Вот форма, которую я использую для отправки параметра этому действию:
<form method = "get" action = "@Url.Action("ChangeID", "Home")">
<label for = "movieInput">Change an ID: </label>
<input type = "text" id = "MovieInput" name = "MovieInput" placeholder = "Enter Your ID" />
<input type = "submit" />
</form>
Маршрут отлично работает с URL-адресом, таким как
/Home/ChangeID/65
однако он не поддерживает ввод параметра отправки формы, где его
/Home/ChangeID?MovieInput=65`.
Как я могу изменить отправку формы, чтобы соответствовать последнему, или есть способ изменить маршрут, чтобы удовлетворить параметр, введенный таким образом? `
Возможный дубликат Строка запроса не работает при использовании маршрутизации атрибутов
Если вы измените шаблон маршрута на Route("Home/ChangeID")
//GET /Home/ChangeID?MovieInput=65`
[HttpGet,Route("Home/ChangeID")]
public ActionResult ChangeID(int MovieInput) {
return View();
}
это будет работать для действия формы или сделать параметр маршрута необязательным Route("Home/ChangeID/{MovieInput?}")
(обратите внимание на ?
)
//GET /Home/ChangeID/65`
//GET /Home/ChangeID?MovieInput=65`
[HttpGet,Route("Home/ChangeID/{MovieInput?}")]
public ActionResult ChangeID(int MovieInput) {
return View();
}
это должно иметь тот же эффект.
Преимущество второго варианта перед первым в том, что он позволяет и /Home/ChangeID/65
, и /Home/ChangeID?MovieInput=65
соответствовать действию контроллера.
Если вы измените маршрут на
Route("Home/ChangeID")
, он будет работать для действия формы. или сделайте параметр маршрута необязательнымRoute("Home/ChangeID/{MovieInput?}"
(обратите внимание на?
), он должен иметь тот же эффект. Преимущество второго варианта перед первым в том, что он позволит и/Home/ChangeID/65
, и/Home/ChangeID?MovieInput=65