2010-03-06 10 views
1

두 개의 Edit 메서드가있는 컨트롤러가 있습니다 (아래 참조). 뷰를 제출할 때 입력 컨트롤을 통해 다시 게시되지 않은 quoteOption의 모든 속성은 비어 있습니다. 예를 들어, quoteOption에는 quoteOptionID가 있습니다 - 표시하거나 편집 할 수 없습니다. 이 속성은 quoteOptionToUpdate에서 비어 있습니다 (0으로 설정). QuoteOptionID에 대한 텍스트 상자를 추가하면 작동합니다.ASP MVC 2 개의 편집되지 않은 필드가 null로 돌아옴

public ActionResult Edit(long id) 
{ 
    quoteOption = quoteService.GetQuoteOptionByID(id); 
    return View("Create",quoteOption); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(QuoteOption quoteOptionToUpdate) 
{ 
    quoteService.UpdateQuoteOption(quoteOptionToUpdate); //quoteOptionID is null 
    return RedirectToAction("Index"); 
} 
+0

것은 당신이 LINQ2SQL의 DataContext를 사용하고 있습니까 : 당신이 다음 quoteOptionToUpdate에 ID를 할당 할 수있는 편집-방법에서

[HttpPost] public ActionResult Edit(QuoteOption quoteOptionToUpdate, Long id) 

? 후드 아래에 –

+0

예,하지만 quoteOption 개체는 서비스 계층을 통해 전달되는 일반 개체입니다. – HitLikeAHammer

답변

2

일반적인 응용 프로그램에서는 웹의 무국적 상태로 인해 필드 값을 앞뒤로 전송해야합니다. 예를 들어 숨겨진 필드에 값을 넣으면됩니다.

<input type="hidden" name="QuoteOptionID" value="...." /> 

ID가 사용자에게 표시됩니다.

특정 세션 정보를 서버 측에 저장하고 사용자 정의 모델 바인더를 사용하여 앱이 사용자가 마지막으로 수행 한 작업을 효과적으로 알 수 있도록 할 수는 있지만 권장하지는 않습니다.

+0

데이터가 어떻게 든 되돌아 올 것이라고 생각했지만 추측하지는 않습니다. 이로 인해 보안을 위해 대용 키 (guids)로 전환하라는 메시지가 표시됩니다. – HitLikeAHammer

+0

나는 또한 동일한 문제가 있습니다 : 편집되거나 편집되지 않은 텍스트 상자 값은 null로 되돌아옵니다. 텍스트 상자는 @ Html.TextBoxFor (m => m.FirstName)와 같은 Html 도우미 메서드를 사용하여 선언됩니다. Employee.FirstName 문자열 속성에 대한 전용 설정자가 없습니다. 어떤 생각? 감사. – Stack0verflow

0

이렇게 작성하면 별도로 ID를 얻을 수 있습니다 (쿼리 문자열에만 있지만 양식에는 존재하지 않으므로).

quoteOptionToUpdate.Id = id; 
관련 문제