【发布时间】:2018-08-16 08:23:18
【问题描述】:
我有一个 .NET MVC 项目,其中我的视图中有多个单选按钮,这些按钮绑定到我的 SQL 表中的唯一项目。 这是我的视图页面中的一个代码块,它为每一行生成两个单选按钮。
@foreach(var item in Model){
@Html.RadioButton(item.ReviewID, "Retain")Retain  
@Html.RadioButton(item.ReviewID, "False")Remove
}
在整个列表下方,我有两个正在尝试处理的按钮,它们将勾选所有相应的单选按钮。
<input type="button" value="Retain All" onclick="retainAll()" />
<input type="button" value="Retain All" onclick="removeAll()" />
我试图调用我在视图中声明的这两个助手:
@helper retainAll()
{
foreach (var item in Model)
{
@Html.RadioButton(item.ReviewID, "Retain", isChecked: true);
}
}
@helper removeAll()
{
foreach (var item in Model)
{
@Html.RadioButton(item.ReviewID, "Remove", isChecked: true);
}
}
但是,当我尝试单击任何按钮时,它什么也没做。 这是它在我的视图中的样子:
请注意,那里的保存更改按钮有效。单击时,它会通过单击单选按钮更新 SQL 数据库。
“保留全部”和“全部删除”按钮的想法只是用保留或删除勾选所有单选按钮。
**再次,我不是在询问如何将单选按钮的值回发到我的 sql 表中。只是询问是否有一种方法,如果我单击视图中的“保留全部”或“全部删除”按钮,它将勾选视图中的所有相应单选按钮。(将它们的 'isChecked' 属性设置为 true)
在我的视图中删除了辅助代码块并将其替换为:
<script>
function retainAll()
{
@foreach (var item in Model)
{
@Html.RadioButton("rbResponse" + item.ReviewItemID.ToString(), "Retain", isChecked: true);
}
}
function removeAll()
{
@foreach (var item in Model)
{
@Html.RadioButton("rbResponse" + item.ReviewItemID.ToString(), "Remove", isChecked: true);
}
}
</script>
【问题讨论】:
-
removeAll()和retainAll()的功能是什么? -
您的
@helper方法毫无意义 - 这是剃刀代码,在模型传递到视图之前在服务器上执行 - 它在客户端上不存在。 -
而且你的
foreach循环也没有任何意义——你将单选按钮绑定到不存在的东西(一个名为item.ReviewID的属性,当你提交时它不会绑定到任何东西。你需要一个包含(比如说)string SelectedValue和List<T>属性的视图模型 -
您需要将您的函数编写为 JavaScript 函数,以便它们在客户端执行。一旦你的页面被渲染,你的剃刀代码将不再存在。
-
@StephenMuecke,item.ReviewID 属性是从我的控制器获得的。我的控制器中有一个 LINQ 查询,它从我的 SQL 表中获取数据并将其传递到我的视图中。它绑定到我的 SQL 表中每一行的“ReviewID”值。
标签: c# asp.net .net asp.net-mvc razor