我在剃须刀页面上有一组单选按钮,提交表单后,我想在服务器端代码中获取并使用这些单选按钮的选定值。单选按钮的HTML:
<label><input class="boost_radio" onclick="boostNo(1)" asp-for="Boost_No.Number" type="radio" name="boostno" value=1 checked="checked" disabled="disabled" />1</label>
<label><input class="boost_radio" onclick="boostNo(2)" asp-for="Boost_No.Number" type="radio" name="boostno" value=2 disabled="disabled" />2</label>
<label><input class="boost_radio" onclick="boostNo(3)" asp-for="Boost_No.Number" type="radio" name="boostno" value=3 disabled="disabled" />3</label>
<label><input class="boost_radio" onclick="boostNo(4)" asp-for="Boost_No.Number" type="radio" name="boostno" value=4 disabled="disabled" />4</label>
<span asp-validation-for="Boost_No.Number"></span>
我正在使用模型绑定来获取服务器端的值:
public class BoostNo
{
[Required(ErrorMessage = "Select Number of Boost Units!")]
public int Number { get; set; }
}
此类的实例如下:
[BindProperty]
public BoostNo Boost_No { get; set; }
不幸的是,每次我运行代码时,我都会得到一个Boost_No.Number = 0
。我尝试将数据类型更改为字符串,但我只得到string = null
。
我正在尝试在处理程序方法中使用模型绑定变量,该方法分配给包含单选按钮的表单。
如果有人可以帮助我,我将非常感激。谢谢。
编辑:
以下是使用模型绑定的处理程序方法:
public IActionResult OnPostSubmit()
{
//save data to sql db
SaveData();
//then some other unrelated stuff
}
还有SaveData()
方法:
public void SaveData()
{
//stuff
//now how the radio button values are actually used
for (int param_i = 1; param_i <= Boost_No.Number; param_i++)
{
//...
}
//then a paramaterized sql database query
}
答案 0 :(得分:2)
这里是我设置的最小示例,以使其正常工作。
这是我的剃刀页面句柄,并且我使用与您相同的类实现。
[BindProperty]
public BoostNo Boost_No { get; set; }
public IActionResult OnPost()
{
return Page();
}
现在使用HTML
<label><input asp-for="Boost_No.Number" type="radio value=1 checked="checked"/>1</label>
<label><input asp-for="Boost_No.Number" type="radio" value=2/>2</label>
<label><input asp-for="Boost_No.Number" type="radio" value=3/>3</label>
<label><input asp-for="Boost_No.Number" type="radio" value=4/>4</label>
更改:
name
属性。为什么?因为asp-for
标签助手会为您创建一个name
属性。除了提供name
属性外,您还为其赋予值boostno
,name
属性还用于将该值绑定到模型,换句话说,就是您的OnPost
处理没有任何绑定的boostno
参数。disabled
,则输入值将被忽略。在提交表单开放式开发者工具(F12)之前,我会仔细检查一遍,并仔细检查您的输入字段元素,以确保它们未被禁用,即使UI可能会建议这样做。
答案 1 :(得分:1)
如果这些是单独的单选按钮,则每个按钮应具有单独的绑定,现在您对每个单选按钮使用相同的绑定。 (Boost_No.Number)。 创建列表列表,然后绑定单个单选按钮 “ Boost_No [0] .Number”或为每个属性创建不同的属性(您的选择)
答案 2 :(得分:1)
所有单选输入都设置为disabled
,因此在提交表单时不会在表单集合中传递任何值。从输入中删除disabled
(和name
)属性:
<label><input class="boost_radio" onclick="boostNo(1)" asp-for="Boost_No.Number" type="radio" value=1 checked="checked" />1</label>
<label><input class="boost_radio" onclick="boostNo(2)" asp-for="Boost_No.Number" type="radio" value=2 />2</label>
<label><input class="boost_radio" onclick="boostNo(3)" asp-for="Boost_No.Number" type="radio" value=3 />3</label>
<label><input class="boost_radio" onclick="boostNo(4)" asp-for="Boost_No.Number" type="radio" value=4 />4</label>