2012-12-12 4 views
0

면도날을 사용하는 양식의 숨겨진 필드에 몇 가지 값을 입력했습니다. 양식을 제출할 때 Entity Framework가 특정 필드의 context.tt 모델에서 만든 유효성 검사를 통과하지 못합니다. 제출할 때 필드가 null 일 수 없다는 오류가 발생합니다. 이로 인해 HTML에서 값이 null이라고 믿게되었습니다. 나는 소스를 선택하면이 내가 볼 것입니다 : ID LoanStatusinput 설정 값을 갖는 이유가 궁금하지만, 그것이 null이 될 수 없다는 오류를 던지고있다숨겨진 필드의 값이 EF 컨텍스트 모델로 전달되지 않습니다.

<input Value="1" data-val="true" data-val-number="The field PoolType must be a number." id="PoolType" name="PoolType" type="hidden" value="" /> 
<input Value="Not Complete" id="LoanStatus" name="LoanStatus" type="hidden" value="" /> 
<input Value="2012-12-12 09:26.39" data-val="true" data-val-required="The DateStamp field is required." id="DateStamp" name="DateStamp" type="hidden" value="" /> 

. throw 된 예외는 다음과 같습니다.

System.Data.ConstraintException이 속성을 null 값으로 설정할 수 없습니다.

HTML의 값을 설정하려면 ViewBag, ViewBag.LoanStatus = "Not Complete";을 사용하여 컨트롤러에서 값을 설정하십시오. 그렇다면 cshtml 파일 @Html.HiddenFor(model => model.LoanStatus, new { @Value = ViewBag.LoanStatus })

제가 누락 된 것이 있습니까? 저는 MVC 및 Entity Framework를 처음 사용하고 있습니다.

편집 - 추가 코드 더 많은 숨겨진 요소

@Html.HiddenFor(model => model.ID, new{ @Value = ViewBag.ID }) 
     @Html.HiddenFor(model => model.Reason, new{ @Value = ViewBag.Reason }) 
     @Html.HiddenFor(model => model.PoolType, new{ @Value = ViewBag.PoolType }) 
     @Html.HiddenFor(model => model.LoanStatus, new{ @Value = ViewBag.LoanStatus }) 
     @Html.HiddenFor(model => model.DateStamp, new{ @Value = ViewBag.DateTime }) 

및 HTML 도우미없이 .cshtml 파일 <input type="hidden" name="LoanStatus" id="LoanStatus" data-val="true" value="@ViewBag.LoanStatus" />

을에서 라인을

<input Value="55" data-val="true" data-val-number="The field ID must be a number." data-val-required="The ID field is required." id="ID" name="ID" type="hidden" value="" /> 
     <input Value="1" data-val="true" data-val-number="The field Reason must be a number." id="Reason" name="Reason" type="hidden" value="" /> 
     <input Value="1" data-val="true" data-val-number="The field PoolType must be a number." id="PoolType" name="PoolType" type="hidden" value="" /> 
     <input Value="Not Complete" id="LoanStatus" name="LoanStatus" type="hidden" value="" /> 
     <input Value="2012-12-12 10:00.46" data-val="true" data-val-required="The DateStamp field is required." id="DateStamp" name="DateStamp" type="hidden" value="" /> 

편집 코드를 생성 된 HTML HTML 소스에서

라인 <input type="hidden" name="LoanStatus" id="LoanStatus" data-val="true" value="Not Complete" />

+1

조치 방법 코드를 표시 할 수 있습니까? – vtortola

+0

왜 그 행에 "값"이 두 번 나타 납니까? – IronMan84

+0

@vtortola 당신은 context.tt에서 유효성 검사를 수행하는 메서드를 의미합니까? – DFord

답변

3

@Html.HiddenFor을 사용할 때 입력 값이 모델 개체에서 읽습니다. Value 특성 값을 지정하여 덮어 쓰려고합니다. 나는 이것이 효과가 없을 것 같아 보시다시피, 당신은 빈 값 속성을 얻습니다.

컨트롤러 :

return View(new YourModel { LoanStatus = "Not Complete" }); 

보기 :

는 viewbag를 사용하지만이처럼보기로 설정 한 값으로 모델 객체를 통과하지 않는 문제를 해결하기 위해
@Html.HiddenFor(m => m.LoanStatus) 
+0

이 작업은 모델에 대한 새로운 레코드를 만드는 관점에 있습니까? – DFord

+0

나는 당신이 성취하려는 것을 이해하지 못합니다. 뷰 책임은 일부 HTML을 렌더링하는 것입니다. 데이터는 컨트롤러 동작에 의해 제공됩니다. – Jan

+0

내가 의미하는 바는 전체 모델을 전달할 권한이 없으며보기가 모델 레코드를 만들기 위해 데이터를 수집해야한다는 것입니다. 그러나 당신이하고 있던 일을 다시 읽었을 때 특정 값으로 채워진 새로운 모델을 만들어서보기에 전달했습니다. 이 일은 고맙습니다. – DFord

0

대신 여기에 HTML 헬퍼를 사용하는 다음과 같은 이유를 수동으로 라인을 단지 시도하지 :

<input type="hidden" name="LoanStatus" value="@ViewBag.LoanStatus"/>

난 아직도의 이유 각을 모르는 당신의 lines은 2 자리로 설정된 값을가집니다. 더 많은 코드를 게시 할 수 있습니까?

편집 : 소문자 값이 다시 컨트롤러로 전달되고 있다고 생각합니다. 대신 @value (소문자 v)를 사용하여 수정했는지 확인하십시오.

+0

나는 Value (대문자 V) 만 지정합니다. 값은 HTML이 생성되어 클라이언트에게 전송 될 때 추가됩니다. – DFord

+0

값 (소문자 v)은 전달 된 것으로 보이며 비어 있습니다. – IronMan84

+0

'@ Value'를'@ Value'의 apposed로 사용하려고 시도했지만 그 중 하나도 작동하지 않았습니다. 값이 html로 설정되지 않았습니다. – DFord

관련 문제