【问题标题】:Issue with Attribute Routing working with traditional form parameter属性路由与传统表单参数一起使用的问题
【发布时间】:2019-10-25 08:41:48
【问题描述】:

我在 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"),它将适用于表单操作。或者使路由参数可选Route("Home/ChangeID/{MovieInput?}"(注意?)它应该具有相同的效果。第二个选项比第一个选项的优点是它允许/Home/ChangeID/65/Home/ChangeID?MovieInput=65

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


【解决方案1】:

如果您将路由模板更改为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 匹配控制器操作。

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 2023-01-25
    • 2014-10-30
    • 2018-08-24
    • 2018-07-11
    • 2021-06-01
    • 1970-01-01
    • 2018-12-31
    • 2021-05-03
    相关资源
    最近更新 更多