2012-07-02 2 views
2

방금 ​​ASP.NET Web Forms에서 빠져 나왔고 현재 MVC 초보자입니다. ASP.NET 웹 폼과 달리 MVC가 ViewState를 관리하지 않는다는 것을 읽었습니다. 데이터 지속성을 어떻게 달성 할 수 있는지 궁금합니다. 다음과 같은 형식으로포스트 백 데이터가 유지되지 않습니다.

class MyModel 
{ 
    public string TextboxData { get; set; } 
    public string HiddenData { get; set; } 
} 

:

@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(m => m.TextboxData) 
    @Html.HiddenFor(m => m.HiddenData) 
} 

내 컨트롤러는 간단 하나입니다

나는 강력한 형식의 모델이 간단한 양식을 가지고있다. 나는 모든 다음에 유지됩니다 제출 이전을 통해 데이터를 입력 한 가정 정정 오전, 컨트롤러는 단지 모델을 재사용하기 때문에

[HttpPost] 
public ActionResult PerformAction(MyModel mv) 
{ 
    mv.DoSomething(); 
    return View(mv);   
} 

: 그것은 단순히 모델의 데이터를 처리하고 다시보기로 전달합니다 새롭게 하다?

사실, TextBoxData에 대한 것이 유지되었지만 (포스트 백 이후에는 텍스트 상자에 입력 된 데이터가 여전히 있음) HiddenData에 대한 텍스트는 유지되지 않았습니다. 내가 여기서 뭔가 잘못하고있는거야?

+0

는 당신이 데이터로 채워진 컨트롤러에서 mv.HiddenData 변수입니다 : 당신이 POST 액션 내부의 원래 게시 값을 수정해야하는 경우

그래서 먼저 ModelState에서 제거 할 필요 다시 게시?그렇지 않은 경우에는 데이터가 뷰로 전송되지 않습니다. 그리고 네, mv에 두 속성에 대한 콘텐츠가 포함되어 있으면보기에 나타나야합니다. HttpGet의 숨겨진 필드에 대한 데이터를 입력했다고 가정합니다 (양식의 숨겨진 필드에 입력 할 수 없기 때문입니다). – Michel

답변

2

올바른 작업을 수행하고있는 것처럼 보입니다. 서버에 다시 게시 할 때 숨겨진 텍스트 데이터도 보내야합니다.

숨겨진 필드의 ID가 중복되었거나 유효하지 않습니다.

Razor MVC model is losing data on Save action

ASP.Net MVC Hidden field not working as expected

이 게시물이 문제를 해결할 수 있습니다 희망을 참조하십시오. 게시물에

+0

다른 타사 플러그인이 사용하고있는 것과 동일한 ID를 사용하고있는 것 같습니다. 브라우저 혼란스러워. 머리를 주셔서 감사합니다 – Devmonster

1

모델이 자동적으로 채워집니다

이 문제에 대한 지금 this dotnetslackers article

에 어떻게 모델 바인딩 작품에 대한 설명을 참조하십시오 -. 질문에 게시 코드를 보면, 당신처럼 보인다 그것을 올바르게하고 있습니다. 문제를 파악하려면 여기를 클릭하십시오. 1. 페이지의 원본을 봅니다. 2. 숨겨진 필드가 값 (원하는 값)으로 렌더링되는지 확인하십시오.

렌더링 된 숨김 필드가 예상되는 값으로 설정되어 있지 않으면 get 모델이 작성되고 "m.HiddenData"가 적절한 값으로 설정되지 않았습니다.

희망이 도움이됩니다!

+0

나는 그것을 얻었다. 다른 요소가 내가 사용했던 동일한 ID로 명명 된 것 같습니다. 브라우저가 혼란 스러웠습니다. – Devmonster

2

또는 HiddenData 속성 값을 수정하면보기를 렌더링 할 때 변경 내용이 반영되지 않습니다. 그 이유는 TextBoxForHiddenFor과 같은 HTML 도우미가 바인딩 할 때 및 모델에있을 때 먼저 ModelState를 조사하기 때문입니다. 이는 의도적으로 설계된 동작입니다.

[HttpPost] 
public ActionResult PerformAction(MyModel mv) 
{ 
    // we intend to modify the values => we must remove them from ModelState 
    // or the HTML helpers will reuse the old values 
    ModelState.Remove("TextboxData"); 
    ModelState.Remove("HiddenData"); 

    mv.TextboxData = "some new value"; 
    mv.HiddenData = "some new hidden value"; 

    return View(mv);   
} 
+0

실제로 DoSomething에서 포스트 백 값을 수정하지 않았습니다. 그러나 적어도 MOdelState에서 해당 값을 제거해야하는지 알고 있습니다. 감사합니다 – Devmonster

+0

+1이 정보는 매우 유용합니다, 우리에게 계몽에 감사드립니다. –

관련 문제