使用传统表单参数的属性路由问题

时间:2019-06-11 00:30:24

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我无法在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 个答案:

答案 0 :(得分:1)

如果将路由模板更改为Route("Home/ChangeID")

//GET /Home/ChangeID?MovieInput=65`
[HttpGet,Route("Home/ChangeID")]
public ActionResult ChangeID(int MovieInput) {
    return View();
}

它将适用于表单操作或使route参数成为可选的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匹配控制器动作。