2009-04-16 4 views
0

드롭 다운 및 텍스트 상자가있는 인덱스보기에서 간단한 검색 페이지가 있습니다. 드롭 다운에 대한 사용자의 선호도를 기억하고 싶습니다. 그래서 테이블에 저장하고 필요에 따라 검색합니다. 다음은 컨트롤러의 기능은 다음과 같습니다ASP.NET MVC 앱의 난감한 동작

Function Index(ByVal lob As String, ByVal filter As String) As ActionResult 
    If If(lob, "") = "" Then 
     lob = GetUserPreferenceLob() 
    End If 
    ViewData("lob") = New SelectList(GetLobValues(), "Value", "Text", lob) 
    ViewData("message") = lob 
    Return View() 
End Function 

보기는 다음과 같습니다

<% Using Html.BeginForm()%> 
Line of Business: 
<%=Html.DropDownList("lob", Nothing, New With {.onchange = "document.forms[0].submit()"})%> 
Search: 
<%=Html.TextBox("filter")%> 
<img src="..." alt="Search" onclick="document.forms[0].submit()" /> 
<%=ViewData("message")%> 
<% End Using%> 

I 앱이 (기본 페이지입니다), 성공적 목록을로드하고 사용자의 항목을 선택 시작할 때. 그러나 페이지로 이동하는 경우 페이지의 다른 링크와 같이 목록을로드하지만 기본적으로 첫 번째 항목을 선택합니다. 난 디버거를 실행하고 항상 색인 기능을 통해가는거야, 그리고 "메시지"출력에 따르면, 그것은 항상 올바른 값을 선택하고, 그래서 그 시나리오는 목록에서 올바른 항목을 선택하지 않는 이유는 무엇입니까?

업데이트 : 드롭 다운에서 선택한 값에 따라 양식에 다른 데이터가 있습니다. 링크를 통해 페이지를 탐색 할 때 나머지 페이지는 해당 항목이 선택된 것처럼 작동하지만 드롭 다운의 기본값은 맨 위에 표시됩니다. 즉, 드롭 다운에 값 "A", "B"및 "C"가 있고 "C"를 선택한 다음 페이지를 다시로드하는 링크를 클릭하면 드롭 다운에 "A"가 표시되지만 나머지는 페이지에 "C"에 대한 데이터가 있습니다.

+0

여러 항목을 선택하지 않았는지 확인 했습니까? (ViewData [ "lob"]과 실제 HTML 소스 모두에서) –

+0

아마도 누락되었지만 데이터가 코드 스 니펫에 드롭 다운되는 방법은 무엇입니까? DropDownList ("lob", Nothing ... ")의"Nothing "은 DropDownList가 아니어야합니다 ("lob ", lob ...). 여기서 lob은 코드 숨김의 공용 또는 보호 된 속성입니다 –

+0

@ James Avery - 제대로 작동하면 해당 항목이 마크 업에서 "selected"를 선택했습니다. 링크를 통해 탐색 할 때 마크 업에서 아무 것도 선택되지 않으므로 목록의 맨 위에 기본값으로 표시됩니다 – gfrizzle

답변

2

페이지 링크를 따라 페이지를 새로 고친 적이 있습니까? 로컬 캐시 버전 일 수 있습니다.

+0

캐싱과 관련이없는 것으로 보입니다. 페이지가 선택된 목록의 첫 번째 항목과 함께 렌더링되지 않습니다. 왜 캐시 된 버전이 있습니까? 나는 또한 다른 SO 스레드에서 모든 캐시 만료 코드를 추가하려고 시도했지만 아무 것도 변경하지 않았습니다. – gfrizzle

+0

더 확실한 가능성을 확인하십시오. –

0

아마 캐시 ...

체크 아웃이 관련 스레드 here (스택 오버플로)

+0

캐시 만료 코드 구현을 시도했지만 아무 것도 변경하지 않았습니다. 캐시와 관련이없는 것 같습니다. – gfrizzle

0

을 나는 텍스트 상자와 매우 유사한 문제가 내 페이지에서

을, 나는 텍스트 상자를 렌더링 Html.TextBox ("Attribute", Model.Attribute). 사용자는이 텍스트 상자에 값을 입력 한 다음 버튼을 누릅니다. 실행되는 코드에서 모델의 특성에 대한 새 값을 계산 한 다음 뷰를 다시 렌더링합니다. Html.TextBox ("Attribute", Model.Attribute)는 여전히 사용자가 입력 한 값을 표시하는 반면 Html.Encode (Model.Attribute)는 모델에서 올바른 값을 표시합니다.

마치 Html.TextBox가 프로그래머가 수정 한 값이 아닌 사용자가 입력 한 값을 표시하는 것처럼 보입니다. 따라서 두 번째 입력 매개 변수의 값을 표시하는 대신 Html.TextBox에 ViewData.ModelState [ "Atrribute"]. Value.RawValue가 표시됩니다.

그래서보기 상태와 왕복 모델을 변경합니다.

관련 문제