2012-03-20 8 views
0

MVC3 .NET4.0 (VB)을 사용하고 있으며 간단한보기에서 이상한 동작이 나타납니다. 다음과 같이 설정되는 만들기보기입니다.값이 지속되지 않음 유효성 검사 오류로 제출하십시오

Inherits="System.Web.Mvc.ViewPage(Of MyProject.MyTable) 

컨트롤러는 매우 간단합니다. 그것은이 레코드가 추가되고있는에 부모 레코드의 ID 허용합니다

Function Create(parent As Integer) As ActionResult 
    Return View(New MyTable With {.parent_id = parent}) 
End Function 

이보기는 다른 것들 사이에 날짜를 받아들이을하지만,이 귀결 :

<% Using Html.BeginForm()%> 
<%=Html.ValidationSummary(True)%> 
<%=Html.DisplayFor(Function(model) model.parent_id)%> 
<%=Html.TextBoxFor(Function(model) model.start_date)%> 
<%=Html.ValidationMessageFor(Function(model) model.start_date, "*")%> 
<button type="submit" id="submitButton">Save</button> 
<% End Using%> 

난 그래서 지금 내 게시물 컨트롤러는 단지 오류를 검사하고, 많은 다른 일을하지, 날짜 오류의 처리를 테스트 :

<HttpPost()> 
Function Create(model As MyTable) As ActionResult 
    If ModelState.IsValid Then 
     Return RedirectToAction("Index") 
    Else 
     Return View(model) 
    End If 
End Function 

내가 처음보기를로드 할 때, 나는 폼에 표시 부모 ID를 참조하십시오. 시작 날짜 필드에 나쁜 날짜를 입력하고 제출을 누르면 폼이 유효하지 않은 값으로 강조 표시되지만 부모 ID는 0입니다. 게시물의 코드를 중단하면 "모델" 부모 ID가 설정되어 있습니다. 이것은 분명히 모든 종류의 문제를 일으킨다. 왜냐하면 나는 본질적으로 부모가 누구인지 잃어 버렸기 때문이다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

UPDATE는 대런의 제안 당 나는 HiddenFor하는 DisplayFor을 변경하고 차이를 볼 수 없었다. 그래서 TextBoxFor를 시도하고 낯선 결과를 얻었습니다. 게시물 기능에 여전히 상위 ID가 표시되지 않지만 값은 텍스트 상자에 유지됩니다.

답변

0

내가 뭘 잘못하고 있니?

양식에 숨겨진 필드로 parent_id을 포함하면 안됩니다. 양식 내부에는 start_date 필드에 해당하는 단일 입력 요소가 있으므로 POST 작업에서 얻을 수있는 모든 요소가 있습니다. 그래서

는 :

<%= Html.HiddenFor(Function(model) model.parent_id) %> 

에만 사용되는 값을 표시하는 DisplayFor, 그것은 양식이 전송 될 때 서버에이 값을 수송하기 위해 모든 입력 필드를 방출하지 않습니다.

+0

DisplayFor는 똑같은 일을했지만 HiddenFor를 시도하고 동일한 결과 (게시 기능에서 상위 ID = 0)를 얻었습니다. – gfrizzle

+0

@gfrizzle, 아니요 DisplayFor는 라벨 만 생성합니다. HTML은 어떻게 생겼습니까? 출처를 봐. 일반적으로''를보아야합니다. POST 액션에서 다시 얻을 수있는 가치입니다. –

+0

HiddenFor는 실제로 ID 값을 유지하지만 내 궁극적 인 문제는 부모 자체와 관련이 있다고 생각합니다. 이러한 테이블은 LINQ to SQL 클래스에 있습니다. 즉, "parent_id"필드 이외에 "Parent"라는 개체가 있습니다. ModelState로 드릴링하면 예상대로 "parent_id"및 "start_date"에 대한 키/값 쌍을 볼 수 있지만 "Parent"에 대한 키/값 쌍도 볼 수 있으며 "Parent"를 문자열 값으로 설정하려고 시도하는 것처럼 보입니다 parent_id와 동일합니다. 즉, 'Parent = "2"'를 시도하고 있으며 결과적으로 ModelState가 유효하지 않습니다. 처음에 컨트롤러를 설정하지 않습니까? – gfrizzle

관련 문제