逗人,
请帮助解决以下问题:
我想在我的视图中呈现复选框列表。
@model IEnumerable<CFts.Models.CFModel>
...
@foreach (var test in ViewBag.CF_list)
{
if (test.Text != "" && test.Text != " ")
{
<div class="checkbox">
<label><input value="@test.Value" id="CF_list_" name="CF_list_" @(test.Selected == true ? "checked" : "") type="checkbox"> @test.Text</label>
</div>
}
}
确定,页面上的复选框。
在控制器(SelectListItem)中生成的CF_list
但问题是 - 如果发送此表单,则至少有一个复选框全部标记为已选中。例如:1。我选择了两个chekckboxed,发送表单 - 一切都OK。 2.我删除所有刻度并发送表格 - 其中一个复选框(最后点击)表示为已选中。
为什么?
CF_List是SelectListItem
另一个问题:
请你帮我理解非常简单的事情
我的班级有模特:
public class VendorAssistanceViewModel
{
public string Name { get; set; }
public bool Checked { get; set; }
}
public partial class CSModel : IEntity
{
public CSModel()
{
VendorAssistances = new[]
{
new VendorAssistanceViewModel { Name = "DJ/BAND" },
new VendorAssistanceViewModel { Name = "Officiant" },
new VendorAssistanceViewModel { Name = "Florist" },
new VendorAssistanceViewModel { Name = "Photographer" },
new VendorAssistanceViewModel { Name = "Videographer" },
new VendorAssistanceViewModel { Name = "Transportation" },
}.ToList();
}
public IList VendorAssistances { get; set; }
我有看法:
@model IEnumerable<CSTS.Models.CSModel>
... some html code...
and how here to show array of checkboxes from Model, using VendorAssistances ?
我知道这很简单,我看了很多文档,但仍然无法理解
谢谢!
答案 0 :(得分:0)
不要设置checked属性,让value属性决定是否选中它。
更改
<label><input value="@test.Value" id="CF_list_" name="CF_list_" @(test.Selected == true ? "checked" : "") type="checkbox">@test.Text</label>
要
<label><input value="@test.Value" id="c_" name="CF_list_" type="checkbox">@test.Text</label>
更新:只是为了让这更容易理解..
不要将SelectListItem用于CF_List,而是使用它。 SelectListItem用于下拉列表。
public class CFListCheckbox
{
public bool IsChecked { get; set; } // Add a property to know if the checkbox should be checked or not
public string Text { get; set; }
public object Value { get; set; } // Change as needed
}
在你的GET行动中..
// Assign an ICollection<CFListCheckbox> to your ViewBag.CF_list
ICollection<CFListCheckbox> cfListCB = cfCollection.Select(r => new CFListCheckbox()
{
IsChecked = false,
Text = r.SomeProp,
Value = r.SomePropOrWhatever
}).ToList();
ViewBag.CF_list = cfListCB;
在您的视图中,使用Html.Checkbox
创建复选框。
@foreach (var test in ViewBag.CF_list)
{
if (!string.IsNullOrWhiteSpace(test.Text))
{
<div class="checkbox">
<label>
@Html.Checkbox("CF_list_", test.IsChecked, new { Value = test.Value }) @test.Text
</label>
</div>
}
}
在你的POST动作中,只需设置ViewBag.ViewBag.CF_list
以防你的帖子失败并返回视图。
// Assign an ICollection<CFListCheckbox> to your ViewBag.CF_list
ICollection<CFListCheckbox> cfListCB = cfCollection.Select(r => new CFListCheckbox()
{
IsChecked = false,
Text = r.SomeProp,
Value = r.SomePropOrWhatever
}).ToList();
// Add logic to re-assign the IsChecked property for your ViewBag.CF_list
foreach(var entry in model.CF_list_)
{
CFListCheckbox item = cfListCB.FirstOrDefault(r => r.Text == entry.SomeProp && r.Value == entry.SomePropOrWhatever);
if(item != null)
{
item.IsChecked = true;
}
}
ViewBag.CF_list = cfListCB;
return View(model);
请注意,示例代码只是为了让您了解自己可以做些什么。这不是绝对的。根据需要进行优化。