2009-06-17 1 views
2

이전에 물어 본 적이 있지만 여기에 있는지 확실하지 않습니다.MVC 업데이트 모델

HTML과 MVC 응용 프로그램이 비슷합니다.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<EnvironmentalVandals.Controllers.MonthlyItemsFormViewModel>" %> 

나는 컨트롤러에 다음을 가지고 있습니다.

[Authorize] 
    public ActionResult Edit(int? id) 
    { snip } 

그런 다음 제출 단추 이벤트에서;

[AcceptVerbs(HttpVerbs.Post)] 
    [Authorize] 
    public ActionResult Edit(FormCollection collection) 
    { 
     CalendarItem fvm = new CalendarItem(); 

     UpdateModel(fvm); 
    } 

기존 이벤트를 업데이트하는 경우 문제가 없습니다. 새 이벤트를 추가 할 때 UpdateModel이 모델을 업데이트하지 못했다는 오류가 발생합니다.

첫 번째 ActionResult에서 "int? id"매개 변수를 제거하면 모델이 새 이벤트와 기존 이벤트 모두에서 업데이트됩니다.

이벤트를 편집 할 때 다음 HTML을 사용합니다. <%=Html.ActionLink("Edit", "Edit", new {id=Model.Event.id}) %> 새 이벤트를 만들 때 <%=Html.ActionLink("Add event","Edit", "Calendar") %>을 사용합니다.

이제 아마 업데이트와 생성 모두에 대해 동일한 View를 사용해서는 안되며 아마도 두 개의 뷰와 PartialView로 리팩토링해야합니다.

그래서 해결책인가, 아니면 내가 잘못하고있는 다른 것이 있습니까?

미리 감사드립니다.

</griegs>

답변

0

나는 코드의 나머지 부분을 볼 수 없습니다,하지만 난 당신이보기에 기존 레코드를 전달하는 편집에 그 가정입니다. 동일한 ID로 새 레코드를 게시하려고하면 컨트롤러는 새 레코드를 만드는 대신 기존 레코드를 수정하려고한다고 생각합니다.

편집 및 추가 모두 동일한보기를 사용할 수 있다고 생각하지만 추가시 새로 만든 레코드 개체를보기에 전달해야합니다. 내 돈을 위해 두 개의 다른 컨트롤러 메소드 (하나는 추가, 하나는 편집 용)에 게시하는 것이 더 쉽습니다.

+0

그래, 코드의 나머지 부분은 좀 지루하지만 당신이 말하는 것처럼. 나는 새로 생성 된 객체를 전달하려고 시도했는데 그 객체를 더미 데이터로 채워 넣으려고했는데, null 허용되지 않는 필드를 어딘가에 놓쳤습니다. 아직도 기쁨이 없습니다. [유일한] 문제는 제출 버튼의 포스트 백에서 UpdateModel을 시도 할 때 발생합니다. –

2

좋아요, 당신은 정말로 관심의 분리가 있어야합니다.

추가 및 편집 작업을 생성하고 편집 화면을 부분보기로 변환 한 다음 추가보기를 추가했습니다.

모든 작품이 완벽합니다.

mvc와 관련하여 다음 사항이 해당됩니다. "힘들어지면 아마 잘못했을거야."