【发布时间】:2021-11-02 21:36:42
【问题描述】:
已经在View 中使用了@Html.CheckBoxFor,我计划在同一个View 中将Tag Helper 与ViewBag 一起使用,以规避一些错误(例如变量定义):
型号
public class test
{
public int ItemID { get; set; }
public string ItemName { get; set; }
public bool IsAvailable { get; set; }
}
控制器
List<test> ItemList = new List<test>();
ItemList.Add(new test {ItemID=1, ItemName="apple", IsAvailable = false});
ItemList.Add(new test {ItemID=2, ItemName="mango", IsAvailable = false});
ItemList.Add(new test {ItemID=3, ItemName="stuck", IsAvailable = false});
ItemList.Add(new test {ItemID=4, ItemName="blocked", IsAvailable = false});
ItemList.Add(new test {ItemID=5, ItemName="help:(", IsAvailable = false});
ViewBag.ItemList = ItemList;
查看
<table>
@foreach (var item in ViewBag.ItemList)
{
<tr><td>
<input type= "checkbox" id = "Check_@item.ItemID" checked="@item.IsAvailable"
onclick="CheckOnlyOneCheckBox(this);"/>
<label for="Check_@item.ItemID">@item.ItemName</label>
</tr>
}
</table>
遇到了2个主要问题:
(a) 无法使用 submit button 检索到 selected box 的值
foreach (var item in ViewBag.ItemList)
{
if (item.IsCheck)
{
var zz = item.ItemName;
}
}
(b) 使用<input type= "checkbox"> 显示的ItemName 的格式看起来与使用@Html.CheckBoxFor 从先前的checkbox list 获得的格式略有不同(例如粗体)。
因此,在使用 @Html.CheckBoxFor 和 ViewBag 方面的任何帮助将不胜感激。
编辑
@Md Farid Uddin Kiron
主要问题在于 checkbox 列表已经通过以下方式定义(在同一个 View 中):
List<test> chk = new List<test>();
chk.Add(new test() {ReferalTypeId=1, ReferalTypeName = "box1",
IsReferalCheck=false});
chk.Add(new test() {ReferalTypeId=2, ReferalTypeName =
"box2", IsReferalCheck=false});
chk.Add(new test() {ReferalTypeId=3, ReferalTypeName =
"Other", IsReferalCheck=false});
CtrList chklist = new CtrList(); // Ctrl being a public class defined
// in MODEL
chklist.reflist = chk;
return View(chklist);
根据经验,我最终遇到了一种情况,我无法在 public IActionResult Index() 中定义另一个 checkbox 列表返回除 chklist 以外的其他内容,因为在循环时不会定义变量(例如 list)它来自View。
因此,我不得不使用:ViewBag,使我能够毫无问题地将变量从Model 传递到View。如果没有 binding 它,这种有效的解决方法会引发另一个问题,我正在调查的最后解决方案包括:
(a)looping 通过checkbox;
(b) 通过ViewBag 识别所选值;
(c) 然后找到一种方法将选定的变量从View 传递给Controller。但是,我不得不承认,后一种方法看起来并不理想。
最好的
【问题讨论】:
-
你为什么不尝试使用
@model List<Test>而不是ViewBag.ItemList这里viewBag的任何具体原因 -
@dark.vador 你能分享一下cshtml的代码吗?
-
到目前为止,我已经对其进行了研究,您可以使用
ViewBag处理单个复选框的CheckBoxFor助手,但对于助手的复选框列表,您会遇到许多其他问题。第一个问题是在将值提交给控制器时,您不能轻松地将值与它绑定。如果您想尝试,请告诉我。有更好的解决方案使用viewModel -
@MdFaridUddinKiron:非常感谢您的回复。我已经根据问题编辑了帖子,同时对了解最佳方法很感兴趣。最好的。
-
@Rahatur:感谢您的反馈。由于
cshtml相当庞大,我已经编辑了帖子,希望它有助于准确理解遇到的问题。最佳
标签: c# asp.net-mvc asp.net-core razor-pages html-helper