2009-12-09 3 views
0

여러 개의 탭이있는 양식이 있습니다. 나는이 같은 페이지에있는 모든 양식을 제출 마스터 저장 버튼을 가지고MVC 앱에서 여러 양식을 제출할 때 액션이 반환해야하는 항목은 무엇입니까?

<% Using Html.BeginForm("Save", "FirstSection")%> 

: 각 탭은 다음과 같이 정의 자체 <form>을 가지고

$("form").each(function() { $(this).submit(); }); 

문제가 있다는 것입니다 I 돈 't은 각 저장 작업을 반환해야합니다 알고 :

<AcceptVerbs(HttpVerbs.Post)> _ 
Function Save(ByVal data As MyTable) As ActionResult 
    SaveTheDataHere() 
    Return View() 
End Function 

을 나는 내가이 저장 조치에 대한 상응하는 "수"가 없기 때문에 실패 할 것 Return View()를 사용하는 경우. 포스트가 정말로하고 싶은 것은 아무 것도 없습니다. 단지 데이터를 저장하고 완료하십시오.

더 나은 반환 값이 있습니까?

답변

3

이 :

$("form").each(function() { $(this).submit(); }); 

은 좋은 생각이 아니다. 첫 번째 제출은 페이지를 다시로드하고 다른 양식은 제출되지 않을 수 있습니다. 더 나은 해결책 :

  1. 모든 양식 컨트롤을 하나의 양식에 배치하고 javascript를 사용하여 활성 탭을 표시하거나 숨 깁니다. 하나의 제출 버튼 만 모든 탭 데이터를 제출합니다.
  2. 각 탭마다 다른보기를 사용하십시오.
+0

문제는 모든 탭을 항상로드하면 모든 작업이 느려지므로 탭을 볼 때만 탭을로드한다는 것입니다. 하나의 큰 양식이있는 경우 모든 필드가로드되지 않으므로 내 저장은 언로드 된 필드를 비워야한다고 생각합니다. – gfrizzle

+0

그런 경우 저장 작업은 빈 필드와 양식에 존재하지 않는 필드의 차이를보기에 충분히 똑똑해야합니다. MVC의 기본 모델 바인더는 컨트롤러 UpdateModel (모델)을 호출 할 때 요청에있는 필드 만 업데이트됩니다. 기본적으로 첫 번째 탭만로드 한 다음 사용자가 새 탭을 클릭 할 때마다 양식을 아약스로 확장하고 하나의 제출 버튼으로 전체 양식을 게시 할 수 있습니다. 모델 바인더는 기존 필드 만 업데이트합니다. – PanJanek

0

상태 메시지가있는 간단한 JsonResult를 반환 할 수 있습니다. 어쨌든 좋은 연습이 될 것입니다. 그 이후로 양식 게시가 실패한 경우 알 수 있습니다.

public JsonResult Save() 
{ 
    SaveTheDataHere() 
    return Json("Success"); 
} 

죄송합니다. C#. 내 VB가 녹슬 었어.

0

PanJanek 바로

또한

당신이

하지만 당신은 당신의 현재 프로세스를 좋아하는 것 같다, 당신은 할 수

반환 아주 쉽게 jQuery로 Ajax와 JSON을 사용할 수있다 보기 ("namedView") 또는 redirectToAction ("actionName")