我想为我的Online_Ballot设置一个复选框,其中一个复选框包含选民可以投票给特定候选人的候选人。
以下是我的代码。
CandidatesViewModel.cs
public class CandidatesViewModel
{
public IEnumerable<candidates> AvailableCandidates { get;set; }
public IEnumerable<Candidates> SelectedCandidates { get; set; }
public PostedCandidates PostedCandidates { get; set; }
}
public class PostedCandidates
{
public string[] CandidatesId { get; set; }
}
Candidates.cs
public class Candidates
{
public int candidates_info_id { get; set; }
public string candidates_fullname { get; set; }
public object Tags { get; set; }
public bool IsSelected { get; set; }
}
控制器
public ActionResult Votation(PostedCandidates PostedCandidates)
{
return View();
}
查看
@Html.CheckBoxListFor(x => x.PostedCandidates.CandidatesId,
x => x.AvailableCandidates,
x => x.candidates_info_id,
x => x.candidates_fullname,
x => x.SelectedCandidates)
但是当我尝试运行此代码时,会显示错误:
'System.Collections.Generic.IEnumerable' 不包含'PostedCandidates'的定义,也没有扩展名 方法'PostedCandidates'接受第一个类型的参数 'System.Collections.Generic.IEnumerable' 可以找到(你错过了使用指令或程序集 引用?)
答案 0 :(得分:1)
您正在声明类型为IEnumerable<Online_Ballot.Models.CandidatesViewModel>
的模型并使用它,就像您拥有的实例不是集合一样。
您需要将模型声明更改为以下(假设您要传递CandidatesViewModel类型的单个实例以从控制器中查看):
@model Online_Ballot.Models.CandidatesViewModel
或者您可以将复选框列表生成更改为这样的(假设您将集合传递给控制器的视图,并且该集合只有一个元素)。
@Html.CheckBoxListFor(x => x.FirstOrDefault().PostedCandidates.CandidatesId,
x => x.FirstOrDefault().AvailableCandidates,
x => x.FirstOrDefault().candidates_info_id,
x => x.FirstOrDefault().candidates_fullname,
x => x.FirstOrDefault().SelectedCandidates)
虽然我建议你去改变模型声明。
<强>更新强>
我还注意到你没有传递视图模型的实例来查看。
public ActionResult Votation(PostedCandidates PostedCandidates)
{
CandidatesViewModel vm = new CandidatesViewModel();
//process or fill your viewmodel here.
return View(vm);
}