Asp.net core mvc 如何将选定的radiobutton值从视图发送到asp.net core中的控制器

Asp.net core mvc 如何将选定的radiobutton值从视图发送到asp.net core中的控制器,asp.net-core-mvc,Asp.net Core Mvc,我正在实现asp.net core 3.1。我的razor视图中有三个单选按钮,使用下面的代码,我想将所选单选按钮值发送到控制器中的Index action,以显示其相关数据。我的问题是在选择单选按钮之后,然后再选择按钮。它将null值发送到Index方法 这是我在razor中的单选按钮代码 @model CSD.ChartObjects <form method="post"> @foreach (var year in Model.Years

我正在实现asp.net core 3.1。我的razor视图中有三个单选按钮,使用下面的代码,我想将所选单选按钮值发送到控制器中的Index action,以显示其相关数据。我的问题是在选择单选按钮之后,然后再选择按钮。它将null值发送到Index方法

这是我在razor中的单选按钮代码

@model CSD.ChartObjects
 <form method="post">
        @foreach (var year in Model.Years)
        {
            <input type="radio" asp-for="Year" value="@year" />@year<br />
        }
        <input type="submit" asp-action="Index" />
    </form>

您遇到的问题是因为:

[HttpPost]
public IActionResult Index([FromForm] string currentYear)
在表单上,要绑定的值称为
Year
,但在POST操作中,指定了一个名为
currentYear
的参数。MVC不知道您想要将
Year
的值绑定到
currentYear
。模型绑定都基于模型上的属性名称与从表单发送的数据相同的约定

因此,您只需将POST方法更改为:

[HttpPost]
public IActionResult Index(string year)

请注意,我还删除了
[FromForm]
属性。为了使其正确绑定,不需要在此处指定。我猜你是在试图找出它为什么不起作用的时候加上的。出于同样的原因,您也不需要viewmodel上的
[BindProperty]
属性-重要的是属性的名称。

感谢您的回复。现在,我有一个问题,无法在默认情况下选中其中一个单选按钮。如果我使用属性check=checked,当我选择默认单选按钮以外的任何其他单选按钮时,将再次选中默认单选按钮。如果有人向我提出解决方案,我将不胜感激。@MinaMRM您应该将其作为单独的问题发布,因为这是一个单独的问题,但请先阅读,看看是否有帮助。
[HttpPost]
public IActionResult Index([FromForm] string currentYear)
[HttpPost]
public IActionResult Index(string year)