Перебирая массив и собирая строку - PullRequest
1 голос
/ 12 сентября 2011
public ActionResult Create(RecurringTask recurringTask, FormCollection collection, ICollection<string> dayOfTheWeek)

Я пытаюсь перебрать dayOfTheWeek (который представляет собой группу флажков), и я пытаюсь выяснить, какой из них является истинным, чтобы я мог использовать его для сборки строки, например: понедельник, вторник и т. Д.

У меня просто не получается найти способ перебрать мою коллекцию, чтобы сделать это. Я продолжаю получать не могу применить == к типу строки к ошибке bool.

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

                        }
                    }
                    recurringTask.DaysOfTheWeek = days;

Это то, что я думаю о том, как это сделать. Но я думаю, что у кого-то есть идея получше, чем у меня. День == true дает мне эту строку для ошибки bool и становится очевидным, почему она происходит, я просто не знаю, как ее обойти.

Мой взгляд таков:

<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" />

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Если вы назвали свои флажки "dayOfTheWeek", ICollection<string> dayOfTheWeek содержит только выбранные флажки.

Так что вы можете просто принять этот список как "результат", но я бы посоветовал вам отфильтровать список днейсо списком допустимых значений для предотвращения злонамеренных атак.

2 голосов
/ 13 сентября 2011

public ActionResult Create (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>
2 голосов
/ 12 сентября 2011

Сообщение об ошибке показательно. Вы пытаетесь сравнить строку day с true или false. Что значит для string быть истинным или ложным?

Вы действительно хотите посмотреть, установлены ли флажки. Вы утверждаете, что dayOfTheWeek - это группа CheckBoxes, но вы вызываете ToString(), чтобы преобразовать ее в список строк. Какой код раньше var days = dayOfTheWeek.ToString(); Где вы декларируете dayOfTheWeek?

Если у вас действительно есть List<Checkbox>, вы действительно хотите перебрать этот список, чтобы посмотреть, проверен ли каждый элемент.

foreach(CheckBox cb in dayOfTheWeek)
{
    if(cb.Checked)
    {
      // Logic
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...