2011-09-12 61 views
1
public ActionResult Create(RecurringTask recurringTask, FormCollection collection, ICollection<string> dayOfTheWeek) 

我想通过dayOfTheWeek(这是一组复选框)循环,我试图找出哪一个是真的,因此我可以使用它来组装一个字符串例如:星期一,星期二等遍历数组并组装一个字符串

我只是无法找到一种方法来循环我的收藏来做到这一点。我一直得到不能应用==到类型的字符串布尔错误。

var days = dayOfTheWeek.ToString(); 
        foreach (string day in dayOfTheWeek) 
        { 
         if(day == true) 
         { 

         } 
        } 
        recurringTask.DaysOfTheWeek = days; 

这就是我正在考虑如何做到这一点。但我想象一个人有比我更好的想法。天==真正给了我这个字符串布尔错误,它明显为什么发生,我只是不知道如何解决它。

我的观点是这样的:

<input type="checkbox" name="dayOfTheWeek" value="Monday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Tuesday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Wednesday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Thursday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Friday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Saturday" /> 
<input type="checkbox" name="dayOfTheWeek" value="Sunday" /> 
+2

您是否正在检查复选框的Caption属性或其“Checked”属性?我的猜测是你没有检查'Checked'属性,因为如果你执行'if(MyCheckbox.Checked)',那很好。 – qJake

+0

@SpikeX - 我甚至没有想到这一点。我是一个超级新手 – Samjus

回答

2

公众的ActionResult创建(RecurringTask recurringTask,收集的FormCollection,ICollection的dayOfTheWeek)

遗憾地说,它不过这可能是我见过的最糟糕的行动签名之一。域模型,FormCollection和一些ICollection<string>的混合。

使用视图模型,强类型视图和编辑器模板(这可能是第10个第4次我在StackOverflow上写这个句子来回答asp.net-mvc标记中的问题)!他们会让你的生活变得更轻松。所以天的名单和相应的布尔属性,表示这一天是否选择:

public class MyViewModel 
{ 
    public IEnumerable<DayOfWeekViewModel> DaysOfWeek { get; set; } 

    ... put any other properties that you consider useful for this view 
} 

public class DayOfWeekViewModel 
{ 
    public string DayOfWeek { get; set; } 
    public bool IsSelected { get; set; } 
} 

然后控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      DaysOfWeek = CultureInfo 
       .CurrentCulture 
       .DateTimeFormat 
       .DayNames 
       .Select(x => new DayOfWeekViewModel 
       { 
        DayOfWeek = x, 
       }) 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     // model.DaysOfWeek will contain all you need here 
     // TODO: do some processing 
     // here you can loop through model.DaysOfWeek to identify which 
     // days have been selected and take respective actions 
     // ... 

     // once you have finished processing you could redirect 
     return RedirectToAction("success"); 
    } 
} 

那么相应的视图:

@model MyViewModel 

@using (Html.BeginForm()) 
{ 
    ... you could put any other fields from your view model that 
     will be used by this form here 

    @Html.EditorFor(x => x.DaysOfWeek) 
    <input type="submit" value="OK" /> 
} 

和相应的编辑模板(~/Views/Home/EditorTemplates/DayOfWeekViewModel.cshtml):

@model DayOfWeekViewModel 

<div> 
    @Html.CheckBoxFor(x => x.IsSelected) @Html.DisplayFor(x => x.DayOfWeek) 
    @Html.HiddenFor(x => x.DayOfWeek) 
</div> 
+0

感谢哥们,我是新手。获得像这样的东西真的帮助我 – Samjus

2

该错误消息揭示。您正试图将字符串daytruefalse进行比较。 string是真是假是什么意思?

你真的想看看复选框是否被选中。你声称那天的TheOffTheWeek是一组CheckBoxes,但你打电话给ToString(),它会将它转换为一个字符串列表。 var days = dayOfTheWeek.ToString();之前的代码是什么你在哪里声明dayOfTheWeek

一旦你真的有List<Checkbox>,你真的想遍历该列表,看看是否检查每个元素。

foreach(CheckBox cb in dayOfTheWeek) 
{ 
    if(cb.Checked) 
    { 
     // Logic 
    } 
} 
+0

我不认为这适用于ASP.NET MVC,因为通常没有CheckBox对象。 – Peter

+0

我之所以打电话给ToString就是因为在找出复选框是否为真/假并且将它保存为字符串后,我不想组装一个字符串 – Samjus

+0

'List '? -1。这是ASP.NET MVC,而不是经典的WebForms。 –

2

如果你命名复选框 “dayOfTheWeek”,ICollection<string> dayOfTheWeek只包含选定的复选框。

因此,您可以将此列表作为“结果”,但我建议您使用有效值列表筛选列表以防止恶意攻击。