2012-06-01 9 views
3

뷰 (Razor Engine)의 모델 (또는 그 일부, 즉 검색 쿼리) 데이터를 모델로 전달하는 방법이 있는지 알아야합니다. 제어 장치.MVC3 (면도기) 모델 데이터를 뷰에서 컨트롤러로 전달

내가 무엇을해야 더 나은 방법으로 설명하기 위해 , 즉 관심있는 코드입니다 :

VIEW : 나는 첫 번째 줄에

@model IEnumerable<MvcMovie.Models.Movie> 

를 전달하려는

@model IEnumerable<MvcMovie.Models.Movie> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

... 
@foreach (var item in Model) { ...} 
... 

@Html.ActionLink("Search", "SearchIndex") 
@Html.ActionLink("Create Document", "createDoc"/*, new { id = Model.ToList() }*/) 

(= foreach 명령에 사용 된 모델)을 컨트롤러 "createDoc"에 연결하여 뷰와 동적으로 바인드 된 보고서 문서를 만듭니다.

나는 모든 것을 시도했다. ViewData (VIEW : ViewData [ "data"] = 모델, CONTROLLER List 영화 = ViewData [ "data"])를 사용해 보았는데, 마찬가지로 TempData를 시도해 보았다. Model ActionLink의 routeValues로 볼 수 있습니다 (new {id = Model.toList()}).

내가 원하는 것을 할 수 있습니까?

아무도 도와 줄 수 있습니까?

답변

1

:

public ActionResult Search(){ 
    var model = new SearchMovieModel(); 
    //you also need to instantiate the null objects unless you do that in the model's constructor 
    model.Movies = new List<Movie>(); 
    return View(model); 
} 

다시 모델로 POST 데이터, 당신은 모델 및 방법을 지정해야 "재 변환"을 ..이 코드

@Html.ActionLink("Create Document", "createDoc", new { id = Model.ToList() }) 

당신의 HTML이를 ... 원하지만 오순절

<a href="/test/createDoc?id=System.Collections.Generic.List%601%5BMvcMovie.Models.Movie%5D">Create Document</a> 
,

그 데이터 타입 없습니다에게

솔루션

  1. 다시 검색을 수행 필터 모델을 정의 렌더링 있기 때문에 (jeremy-holovacs 및 광산의 추천) 왜 서버에 동일한 데이터를 다시 요청 ? 누군가가 그 링크를 공유한다면 ...이 결과에도 앱이 내가 찾던 그냥 뭐 컨트롤러

+0

Zach dev에 감사드립니다. 네가 준 2 번째 옵션을 시도해 볼게. 샘플 코드를 게시 할 수 있습니까? 감사. – Jack88PD

2

귀하의 모델은 IEnumerable<MvcMovie.Models.Movie>이 아니어야합니다. 예를 들어, SearchMovieModelIEnumerable<MvcMovie.Models.Movie> Movies의 속성 중 하나 여야합니다. 당신이 검색 모델을 원하는 경우에

, 이런 일이 적절할 것 :

public class SearchMovieModel{ 
    public IEnumerable<MvcMovie.Models.Movie> Movies {get;set;} 
    public string SearchString {get;set;} 
} 

는이 모델과 뷰와 컨트롤러의 속성을 참조합니다.

컨트롤러에서이 구문 분석 방법을 추가해야한다고 생각합니다.

뷰에 대한 첫 번째 호출에서 모델이 존재하지 않습니다. 당신은 당신의 컨트롤러를 만들 필요가 : 나는 당신이 무엇을 알고 있다고 생각

[HttpPost] 
public ActionResult Search(SearchMovieModel model){ 
    if (ModelState.IsValid){ 
     //populate your IEnumerable<Movie> here. 
     return View(model); 
    } 
    // the complex collection will not be parsed back into the model. You will need to repopulate it. 
    model.Movies = new List<Movie>(); 
    return View(model); 
} 
+0

위대한 설명,에게 전달하기 위해, 예를 들어 JSON으로

  • 직렬화 데이터를 생성 가짜 데이터를 주입의 무슨 당신이 상상할 수있다. 위로 투표 : D – DaniKR

  • 관련 문제