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

を組み立てます例:月曜日、火曜日など私は(チェックボックスのグループである)dayOfTheWeekをループにしようとしていますし、私は、文字列を組み立てるためにそれを使用することができ比べて真である1を見つけるためにしようとしている配列をループし、文字列に

私は自分のコレクションをループする方法を見つけることができません。私は= boolエラーに型文字列の==を適用することはできません取得し続けます。

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

         } 
        } 
        recurringTask.DaysOfTheWeek = days; 

これが私のやり方です。しかし、そこにいる誰かが私よりも良いアイデアを持っていると思います。その日が==真実であれば、私はその文字列を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" /> 
+2

チェックボックスの 'Caption'プロパティまたは' Checked'プロパティをチェックしていますか?あなたが 'if(MyCheckbox.Checked)'をうまく動作させると 'Checked'プロパティをチェックしていないと思います。 – qJake

+0

@SpikeX - 私はそれについても考えていません。私はスーパーニューバです。 – Samjus

答えて

2

公共のActionResultはそれを言って申し訳ありません

(RecurringTask recurringTask、FormCollectionコレクション、ICollectionをdayOfTheWeek)を作成しますが、それはおそらく私が今まで見た中で最悪の行動署名の一つです。ドメインモデル、FormCollection、および一部の ICollection<string>が混在しています。

ビューモデル、強く型付けされたビュー、エディタテンプレートを使用してください(おそらく、asp.net-mvcタグの質問に応じてStackOverflowにこの文を書いています。彼らはあなたの人生をずっと簡単にします。だから、日のリストと、この日が選択されているかどうかを示すために、対応するブール型プロパティ:

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

私の見解はこれです。文字列daytrueまたはfalseを比較しようとしています。 stringがtrueまたはfalseであるとはどういう意味ですか?

本当にチェックボックスがオンになっているかどうかを確認する必要があります。 dayOfTheWeekはCheckBoxesのグループですが、ToString()を呼び出すと、その文字列のリストに変換されます。前にコードは何ですかvar days = dayOfTheWeek.ToString();dayOfTheWeekをどこに宣言していますか?

実際にList<Checkbox>を取得したら、そのリストを繰り返し繰り返し、各要素がチェックされているかどうかを確認します。

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

通常、CheckBoxオブジェクトが存在しないので、ASP.NET MVCではこれが動作しないと思います。 – Peter

+0

チェックボックスがtrue/falseで、文字列として保存するよりも、文字列を組み立てることができないため、ToStringを呼び出すのはなぜですか? – Samjus

+0

'List '? -1。これは、従来のWebFormsではなく、ASP.NET MVCです。 –

2

あなたが "dayOfTheWeek" あなたのチェックボックスを命名した場合、ICollection<string> dayOfTheWeekのみが選択されたチェックボックスが含まれています。

このリストを「結果」として使用することもできますが、悪意のある攻撃を防ぐために有効な値のリストを使用して曜日のリストをフィルタリングすることをお勧めします。

関連する問題