【发布时间】:2020-07-31 03:48:05
【问题描述】:
我一直试图了解这里发生了什么,但没有运气。我有一个控制器,里面有一些动作,其中两个通过属性标记为帖子。在我看来,这两个帖子使用 asp-route 助手映射到两种不同的形式。这三个路由(它们都使用 Route 属性和特定名称注册)需要一个整数参数作为路由的一部分,该参数被限制为 int。设置第二个asp-route参数时出现问题,问题是form标签中生成的action属性没有被填充。
让我分享一些代码来更好地解释这一点。
控制器:
[Route("teams")]
public class TeamsController: Controller
{
[Route("list/{groupId:int}", Name = "TeamsList")]
public IActionResult List(int groupId)
{
//some logic
return View(viewmodel);
}
[Route("list/{groupId:int}", Name = "TeamListPost")]
[HttpPost]
public IActionResult List(int groupId, int activityId)
{
//some logic
return RedirectToRoute("TeamsList", new {groupId});
}
[Route("details/{groupId:int}", Name = "TeamDetailsPost")]
[HttpPost]
public IActionResult Details(int groupId)
{
//some logic
return RedirectToRoute("TeamsList", new {groupId});
}
}
查看:
<form asp-route="TeamListPost">
<button type="submit">Send post</button>
</form>
<form asp-route="TeamDetailsPost">
<button type="submit">Send another post</button>
</form>
如果访问 /teams/list/1 这里没有错,第一个表单会生成要设置为 /teams/list/1 的操作属性,我希望如果访问 /teams/list/1,则生成设置为 /teams/details/1 的操作属性的第二种形式,但我得到了一个空的操作属性。
我注意到的一件有趣的事情是,当我从 TeamDetailsPost 路由中移除约束时,它至少会将操作属性呈现为 /team/details,这对我来说毫无意义。
有人知道会发生什么吗?
【问题讨论】:
标签: asp.net-core-mvc