asp.net-core-mvc - 如何将选定的单选按钮值从视图发送到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)
{
...
}
解决方案
你遇到的问题是因为这个:
[HttpPost]
public IActionResult Index([FromForm] string currentYear)
在您的表单上,您要绑定的值称为Year
,但在您的 POST 操作中,您指定了一个名为 的参数currentYear
。MVC 不知道您要绑定 to 的Year
值currentYear
。模型绑定完全基于模型上的属性名称约定,与从表单发送的数据相同。
因此,您需要做的就是将您的 POST 方法更改为:
[HttpPost]
public IActionResult Index(string year)
请注意我是如何删除该[FromForm]
属性的。您无需在此处指定以使其正确绑定。我猜你在试图弄清楚它为什么不起作用时添加了它。出于同样的原因,您也不需要[BindProperty]
视图模型上的属性 - 重要的是属性的名称。
推荐阅读
- javascript - 在 Axios 上设置标题
- python - 如何使该图中的一条线与其他线的颜色不同?
- react-native - 如何在 React Native 中的 MapView 右下角放置一个按钮?
- python - 如何在while循环中正确使用“break”?
- c# - JsonConvert.DeserializeObject 将属性保留为空
- sql - 试图弄清楚如何进行查询以显示 21 天后到期的记录
- python - 如何找到具有多个匹配项的 id?
- reactjs - 我收到错误道具未定义
- f# - F#铁路编程是这个初始化可以改进吗?
- phpmyadmin - phpMyAdmin 从不加载或给出 502 Bad Gateway 错误