2009-09-27 3 views
8

데이터베이스에 기본 키인 System.Guid가있는 테이블을 만들었습니다. 필요한 ADO.Net Entity Framework 모델이 생성되었으며 필요한 저장 프로 시저가 매핑되었습니다.System.Guid를 ASP.Net MVC의 기본 키로 사용 하시겠습니까?

새 컨트롤러를 만들고 데이터에 대한 만들기 및 편집에 필요한 기본 코드를 추가했습니다. 링크에 클릭하면 다음과 같은 오류가 생성되는 특정 레코드를 편집 할 수 그러나 때

The parameters dictionary contains a null entry for parameter '[MyId]' of non-nullable type 'System.Guid' for method 'System.Web.Mvc.ActionResult Edit(System.Guid)' in '[MySite].[MyController].[SpecificController]'. To make a parameter optional its type should be either a reference type or a Nullable type. Parameter name: parameters

다음과 같이 편집 작업을 컨트롤러에 선언 :

public ActionResult Edit(Guid itemId) 
{ 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(MyItem itemToModify) 
{ 

} 

새로운 추가 저장 프로 시저를 통해 새 Guid가 생성되고 목록에 올바른 Guid가 표시됩니다. URL은 검색을 위해 올바른 GUID도 전달합니다.

이 실패하는 지점을 캡처 할 수없는 것 같지만 System.Guid를 매개 변수로 컨트롤러에 전달하는 방법은 무엇입니까?

답변

17

경로를 업데이트하지 않는 한 경로의 최종 매개 변수는 "id"라는 이름이 지정됩니다 (기본적으로). 즉,/specific/edit/5646-0767 -...과 같은 경로가있는 경우 메소드의 매개 변수 이름과 상관없이 GUID를 키 "id"가있는 경로 값 사전에 매핑합니다. 나는이 규칙을 따르고로 메소드 정의를 변경할 것 :

public ActionResult Edit(Guid id) 

명시 적 경로 매개 변수의 이름을 지정하여,이 문제를 얻을 수 있지만, 다음과 같은 URL을 끝낼 :/특정/편집? 항목 ID = 5646-0767 -...

+0

이제 나는 묻기를 바보라고 느낍니다. ( – BinaryMisfit

+0

그것에 대해 걱정하지 마십시오. 제가 대답을 알고있는 유일한 이유는 한 번 똑같은 일을하고 그것을 알아 내야 만했기 때문입니다. – tvanfosson

4

(I 확실했다)

 public ActionResult Profile(Guid? id) 
    { 
     if (!id.HasValue) 
     { 
      return View(new ProfileRepository().GetUserProfile(User.Identity.Name)); 
     } 

     return View(new ProfileRepository().GetUserProfile(id.Value)); 

    } 

오른쪽에 저를지도 위의 anwer 주셔서 감사를해야 할 수도 있습니다 누군가를 위해 아래의 샘플 코드를 퍼팅 방향

관련 문제