如何解决如何将选定的单选按钮值从视图发送到asp.net核心中的控制器
我正在实现asp.net core 3.1。我在剃刀视图中有三个单选按钮,并使用以下代码,我想将选定的单选按钮值发送到控制器中的Index动作,以显示其相关数据。我的问题是选择一个单选按钮后,然后选择该按钮。它将空值发送给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不知道您要将Year
的值绑定到currentYear
。模型绑定全部基于模型上属性名称的约定,该约定与从表单发送的数据相同。
因此,您所需要做的就是将POST方法更改为此:
[HttpPost]
public IActionResult Index(string year)
请注意,我还如何删除了[FromForm]
属性。您无需在此处指定即可正确绑定。我猜您是在试图弄清楚为什么它不起作用的时候添加了它。出于同样的原因,您也不需要在视图模型上使用[BindProperty]
属性-重要的是属性的名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。