Проблема с атрибутом маршрутизации при работе с традиционным параметром формы - PullRequest
1 голос
/ 11 июня 2019

У меня проблемы с использованием маршрутизации атрибутов в 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`. 

Как я могу изменить отправку формы, чтобы она соответствовала последней, или есть способ изменить маршрут, чтобы он соответствовал параметру, введенному таким образом? `

1 Ответ

1 голос
/ 11 июня 2019

Если вы измените шаблон маршрута на 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 соответствовать действию контроллера.

...