首页 > 解决方案 > 如何将选定的单选按钮值从视图发送到asp.net核心中的控制器

问题描述

我正在实施 asp.net core 3.1。我的剃刀视图中有三个单选按钮,使用以下代码,我想将选定的单选按钮值发送到控制器中的索引操作,以显示其相关数据。我的问题是在选择一个单选按钮之后,然后选择该按钮。它将空值发送到 Index 方法。

这是我在剃须刀中的单选按钮代码

@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>

这是我在剃刀中读取的模型对象

    public class ChartObjects
    {
        public List<ChartModel> Percent { get; set; }
        public List<ChartModel> Time { get; set; }
        public List<ChartModel> Avg { get; set; }
        public List<ChartModel> Total { get; set; }

        [BindProperty]
        public string Year { get; set; }
        public string[] Years = new[] { "1398", "1399", "1400" };
    
}

这是我的 HomeController 的主体:

[HttpGet]
        public IActionResult Index()
        {
            return (BuildIndexModel("1399"));
        }

        [HttpPost]
        public IActionResult Index([FromForm] string currentYear)
        {
            return (BuildIndexModel(currentYear));
        }



        public IActionResult BuildIndexModel([FromForm] string currentYear)
        {
...
}

标签: asp.net-core-mvc

解决方案


你遇到的问题是因为这个:

[HttpPost]
public IActionResult Index([FromForm] string currentYear)

在您的表单上,您要绑定的值称为Year,但在您的 POST 操作中,您指定了一个名为 的参数currentYear。MVC 不知道您要绑定 to 的YearcurrentYear。模型绑定完全基于模型上的属性名称约定,与从表单发送的数据相同。

因此,您需要做的就是将您的 POST 方法更改为:

[HttpPost]
public IActionResult Index(string year)

请注意我是如何删除该[FromForm]属性的。您无需在此处指定以使其正确绑定。我猜你在试图弄清楚它为什么不起作用时添加了它。出于同样的原因,您也不需要[BindProperty]视图模型上的属性 - 重要的是属性的名称。


推荐阅读