2009-09-27 23 views
8

Veritabanında, birincil anahtar olarak System.Guid olan bir tablo oluşturdum. Gerekli ADO.Net Entity Framework modeli oluşturuldu ve gerekli saklı yordamlar eşlendi. System.Guid'i ASP.Net MVC'de birincil anahtar olarak kullanma?

Ben yeni denetleyicisi oluşturulan ve veri için oluşturma ve düzenleme için temel gerekli kod eklendi. linke tıklayarak aşağıdaki hata oluşturulur belirli bir kaydı düzenlemeyi Ancak zaman:

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

aşağıdaki gibi düzenlemek eylem denetleyicisi bildirilir:

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

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

} 

yeni ekleyerek Yeni Kılavuzun bir Kayıtlı Yordam ile oluşturulduğunu kaydedin ve liste doğru Kılavuz'u görüntülüyor. Url, ayrıca alma için doğru Guid'i de geçiriyor.

Ben Bu başarısız noktayı yakalamak gibi olamaz

ama Kontrolör parametre olarak bir System.Guid geçen hakkında nasıl gidebilir? Eğer güzergah güncelledik sürece

cevap

17

, bir rotada son parametre "id" ismini vermek (varsayılan) bekliyor. Yani, eğer/specific/edit/5646-0767 -... gibi bir rotanız varsa, metodunuzdaki parametrenin ne olduğuna bakmaksızın guid'i "id" anahtarıyla rota değeri sözlüğüne eşleştirecektir. Bu düzeni takip etmek yöntem tanımını değiştirmek istiyorum:

public ActionResult Edit(Guid id) 

Açıkça rota parametresinin adını belirterek, bu sorunun üstesinden gelebilirsiniz, ama o zaman gibi görünen bir url ile bitirmek:/spesifik/düzenle? itemid = 5646-0767 -...

+0

Şimdi kendime sorduğum için kendimi aptal hissediyorum :( – BinaryMisfit

+0

Bunun için endişelenme - cevabını bilmemin tek sebebi aynı şeyi bir kez yaptım ve anlamaya çalışmaktı. – tvanfosson

4

(emin yaptım)

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

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

    } 

sağ götürdü yukarıda cevaplamaya için teşekkür ederiz lazım olabilir herkes için aşağıdaki örnek kod koyarak yön

İlgili konular