2011-09-12 5 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; 

이것은 어떻게 수행 할 것인지 생각하고 있습니다. 하지만 거기에있는 누군가가 내가하는 것보다 더 좋은 아이디어가 있다고 상상해보십시오. 날 == 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" /> 
+2

체크 박스의'Caption' 속성 또는'Checked' 속성을 체크하고 있습니까? 내 생각 엔'If (MyCheckbox.Checked)'가 정상적으로 작동한다면'Checked' 속성을 체크하지 않는 것입니다. – qJake

+0

@ SpikeX - 나는 생각조차하지 못했습니다. 나는 수퍼 newb입니다. – Samjus

답변

2

(RecurringTask recurringTask, FormCollection 수집, ICollection에 dayOfTheWeek) 죄송합니다

는 말을하지만 그건 아마 내가 본 최악의 행동 서명 중 하나입니다. 도메인 모델, FormCollection 및 일부 ICollection<string>이 혼합되어 있습니다.

보기 모델, 강력한 입력보기 및 편집기 템플릿을 사용하십시오 (아마도태그의 질문에 대한 응답으로이 문장을 StackOverflow에 쓰고있는 10 번째 4 번째 시간 일 것입니다)! 그들은 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다.그래서 일의 목록과 해당 부울 속성은이 날이 선택되었는지 여부를 나타냅니다 :

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>이 있으면 각 요소가 선택되어 있는지 확인하기 위해 해당 목록을 반복하고 싶습니다. 당신이 "dayOfTheWeek"당신의 체크 박스라는 이름의 경우

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

ASP.NET MVC에서는 일반적으로 'CheckBox' 객체가 없기 때문에이 기능이 작동하지 않는다고 생각합니다. – Peter

+0

체크 상자가 true/false이고 문자열로 저장하는 대신 문자열을 조합하지 않으므로 ToString을 호출하는 이유는 다음과 같습니다. – Samjus

+0

'List '? -1. ASP.NET MVC는 고전적인 WebForms가 아닙니다. –

2

ICollection<string> dayOfTheWeek 만 선택 확인란이 포함되어 있습니다.

이 목록을 "결과"로 사용할 수는 있지만 악의적 인 공격을 막기 위해 유효한 값 목록으로 날짜 목록을 필터링하는 것이 좋습니다. 공공 ActionResult 만들기

관련 문제