CheckBox实现

时间:2015-03-23 03:52:50

标签: c# asp.net-mvc

我想为我的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'   可以找到(你错过了使用指令或程序集   引用?)

1 个答案:

答案 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);
}