2011-05-03 4 views
5

Razor로 MVC3 응용 프로그램이 있고 내부 뷰에서 부분 뷰를 렌더링했습니다. _SearchFilters 부분보기 내부AJAX를 사용하지 않고 ASP.NET MVC3 부분 뷰를 다시로드

@{Html.RenderPartial("_SearchFilters", Model.SearchFilters);} 

@* Other HTML elements *@ 

내가 가진 양식 요소 내부에 다음과 같은 DropDownLists :

Choose Year 
      @Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text"), DateTime.Now.Year) 

Choose Month 
      @Html.DropDownListFor(m => m.Month, new SelectList(Model.MonthsList, "Value", "Text"), Model.Month.ToString(), new { @disabled = "disabled" }) 


     <input type="submit" value="Display" /> 

내가 에 따라 그 부탁이 두 제출이 같은 주요보기 모습입니다 DropDownLists은 필터링 된 데이터로보기가 다시로드 될 때 사용자가 선택한 값을 유지합니다.

AJAX를 사용하지 않고이를 수행 할 수있는 방법이 있습니까? 하지 아약스없이

public class TableSearchFiltersViewModel 
{ 
    public bool YTM { get; set; } 

    public int? Month { get; set; } 

    public int? Year { get; set; } 

    public IEnumerable<SelectListItem> YearsList 
    { 
     get 
     { 
     return Enumerable.Range(2011, (DateTime.Now.Year - 2011 + 4)).Select(m => new SelectListItem 
     { 
      Value = m.ToString(), 
      Text = m.ToString(), 
     }).OrderBy(m => m.Value); 
     } 
    } 

    public IEnumerable<SelectListItem> MonthsList 
    { 
     get 
     { 
      return Enumerable.Empty<SelectListItem>(); 
     } 
    } 

}

감사

프란체스코

+0

이 왜없이이 작업을 수행하려고 에이 잭? 대답에 대해 – BentOnCoding

답변

1

:

은 월을 선택

편집 :

@Html.DropDownListFor(m => m.Month, 
Model.MonthsList.Select(
     t => new SelectListItem { 
       Text = t.Name, 
       Value = t.Value, 
       Selected = t.Value == Model.Month, 
     }, 

Model.Month.ToString(), new { @disabled = "disabled" }) 
+0

답변 주셔서 감사하지만 작동하지 않습니다. x.ID 필드 란 무엇입니까? – CiccioMiami

+0

@francesco .. 나는 그것을 t.value이어야한다 지금 편집했다. 기본적으로 MonthList.Select가 반환하고 IEnumerable SelectListItem을 선택하면 Model = when tru가 선택됩니다.달은 그 가치와 일치한다. – ZeNo

1

를하거나 재 게시해야합니다 :

다음 UPDATE

뷰 모델이 될 때 전체 형태. MVC는 winforms 응용 프로그램과 같이 동적이지 않은 웹 프레임 워크입니다. 컨트롤러에 변경 사항을 게시하고 필요한 변경 사항으로 페이지를 다시로드하거나 아약스를 사용하여 변경 사항을 다시로드해야합니다.

+0

감사합니다. DropDownList HTML 도우미에게 기본 selecte 값 (이 경우 selectedYear 및 selectedMonth)을 원한다는 것을 어떻게 알 수 있습니까? – CiccioMiami

+0

@Francesco :이 게시물에 대한 답변에서 쓴대로 - 선택된 값은 SelectList 생성자에 대한 인수로 제공 될 수 있습니다. HTH –

2

양식을 해당 컨트롤러 조치에 제출할 때이 조치는 입력 매개 변수로 일부보기 모델을 취해야합니다. 이 뷰 모델의 속성은 두 개의 드롭 다운의 선택된 값을 포함하여 양식에 포함 된 입력 필드에서 바인딩됩니다. 그런 다음 컨트롤러 동작은 드롭 다운 상자의 선택된 값을 유지하는 동일한보기를 반환 할 수 있습니다.

내가 대신으로 파셜 렌더링의 결국 드롭 다운의 적절한 이름을 보장한다하더라도 사용자가 선택한 값을 보존 편집기 템플릿을 사용하는 것이 좋습니다 : 당신은 에 대한 기본값을 제공 할 수

@Html.EditorFor(x => x.SearchFilters) 
+0

@Darin Dimitrov : 그건 분명 감사합니다. 현재 컨트롤러의 액션 메소드에 뷰 모델 (기본적으로 selectedYear 및 selectedMonth)을 전달한 다음 뷰에 전달합니다 (주로 dtata가 참조하는 연도와 월의 사용자에게 표시하기 위해). DropDownList HTML 도우미에게 기본 selecte 값 (이 경우 selectedYear 및 selectedMonth)을 원한다는 것을 어떻게 알 수 있습니까? – CiccioMiami

+1

@Francesco, 해당 드롭 다운 목록의 이름을 올바르게 지정하는 편집기 템플릿을 사용하면이 작업이 자동으로 수행됩니다. 여러분이 선택하지 않으면, 선택 값을'SelectList' 생성자의 네 번째 인수로 지정할 수 있습니다. –

+0

@Darin Dimitrov : 귀하의 조언을 따르고 편집자 템플릿을 만듭니다. 그러나 문제는 (나는 그것이 관련이 없다고 생각했다.) DropSourceList는 월과 관련이있다. – CiccioMiami

1

속성 (첫 번째 요청에서 선택됨)을 입력하고 하드 코드 된 시작 값 대신 바인딩합니다.

그래서 대신 : BTW (나는 DateTime.Now.Year이 예에 생각하는) 선택 값으로, 잘못된 것

@Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text"), DateTime.Now.Year) 

selectList의의 생성자로 제공되어야한다 대신 DropDownListFor 메서드의 인수). DropDownListFor 메서드에 'selected value'인수가 없습니다.

당신은 쓸 수 있습니다 : 두 번째 드롭 다운에서

@Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text", Model.Year)) 

와 유사합니다.

이렇게하면 게시 된 모델 (Model.Year 및 Model.Month이 보유하고있는 것처럼)을 사용하여 렌더링 할 때 드롭 다운이 선택된 값을 유지하게됩니다. 따라서 이후 제출 된 값은 기본 값으로 덮어 쓰지 않도록해야합니다.

나는 테스트 할 수 있도록이 시간에 IDE가없는하지만이 작동 할 수
관련 문제