2014-05-14 3 views
0

저는 MVC가 새로 도입되었으며 모든 것이 어떻게 작동하는지 이해하기 위해 완료 한 자습서를 편집하려고합니다. 원래이 자습서에는 영화 제목을 확인하는 매개 변수와 영화 장르를 검사하는 매개 변수로 검색 할 수있는 검색 기능이 있었으며 해당 매개 변수가있는 일치하는 값의 쿼리를 반환했습니다.null이 아닌 입력 오류가있는 컨트롤러 메서드 매개 변수를 변경하는 중

저는 배우 이름과 배우 나이 (int)로 검색하는 배우 검색을 시도하고 있습니다. 난 나이가 nullable 타입 문제를 계속 받고, 나는 int로 나이를 선언에서 모든 것을 시도했다., ToString() IsNullOrEmpty,하지만 아무것도 작동했습니다.

누군가이 문제를 해결하는 방법을 보여줄 수 있습니까?

다음은 자습서의 searchIndex 함수입니다. 시대의

public DateTime BirthDate { get; set; }//user input 
public int Age 
      { 
       get { 
        return (int)(DateTime.Now - BirthDate).TotalDays/365; 
       } 

내보기 : 아래

public ActionResult SearchIndex(string movieGenre, string searchString) 
    { 
     var GenreList = new List<String>(); 
     var GenreQry = from d in db.Movies orderby d.Genre select d.Genre; 

     GenreList.AddRange(GenreQry.Distinct()); 
     ViewBag.movieGenre = new SelectList(GenreList); 


     var movies = from m in db.Movies select m; 

     if (!String.IsNullOrEmpty(searchString)) 
     { 
      movies = movies.Where(s => s.Title.Contains(searchString)); 
     } 

     if (string.IsNullOrEmpty(movieGenre)) 
     { 
      return View(movies); 
     } 
     else 
     { 

      return View(movies.Where(x => x.Genre == movieGenre)); 
     } 

    } 

내 버전 (INT의 나이와 문자열)

public ActionResult SearchIndex(int ageValue, string searchString) 
     { 
      var AgeList = new List<int>(); 
      var AgeListQry = from d in db.Actors orderby d.Age select d.Age; 

      AgeList.AddRange(AgeListQry.Distinct()); 
      ViewBag.ageValue = new SelectList(AgeList); 

      var actors = from a in db.Actors select a; 

      if (!String.IsNullOrEmpty(searchString)) 
      { 
       actors = actors.Where(s => s.Name.Contains(searchString)); 

      } 

      if ("Trying to see if Age is null - this fails on page load") 
      { 
       return View(actors); 
      } 
      else 
      { 
       return View(actors.Where(x => x.Age == ageValue)); 
      } 
     } 

모델에서 INT 시대의 내 초기화입니다 (두 개의 문자열) (여기서 int를 완벽하게 구현하는 방법을 모른다.

<p> 
    @Html.ActionLink("Create New", "Create") 
    @using (Html.BeginForm("SearchIndex","Movies",FormMethod.Get)){ 
     <p>Age: @Html.TextBox("ageValue") 
     <p> Title: @Html.TextBox("SearchString")<br /> 
     <input type="submit" value="Filter" /></p> 
     } 
</p> 

내가이 모든 것을 처음 접했을 때 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다.

+0

SearchIndex (int ageValue, string searchString)이 호출되었거나 ageValue가 제대로 읽히지 않는 위치에 게시 하시겠습니까? 생년월일은 어디에서 오는거야? –

+0

@LIUFA 추가, 미안 해요, 난 여전히 MVC 주위에 내 머리를 포장 일반적으로 그냥보기 에서이 필요뿐만 아니라 실현. – Austin

+0

"SearchString"은 "searchString"이어야합니다. 그래서 디버깅은 ageValue가 메서드에 제대로 전달되는 것입니까? 또한 GET을 사용하여 양식을 제출하는 이유는 무엇입니까? –

답변

0

문제는 Age 변수가 가질 않았다이었다 미리 만든이 수동으로 고려, 따라서 Age이 테이블에 존재하고 있지 않습니다

public DateTime BirthDate { get; set; } 
     public int Age 
     { 
      get 
      { 
       DateTime today = DateTime.Today; 
       int age = today.Year - BirthDate.Year; 
       if (BirthDate > today.AddYears(-age)) age--; 
       return (int)age; 
      } 

     } 

같은 매핑 된 {get; set;}, 비 매핑 및 맵핑되지 않은 변수를 판별하려면 다른 맵핑 된 항목 ({get; set;}이있는 변수)을 사용해야합니다.

이 시나리오에서는 BirthDate를 사용하여 내 컨트롤러에서 내 나이를 계산했습니다.

관련 문제