2009-09-27 30 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をパラメータとしてControllerに渡すにはどうすればいいですか?

答えて

17

ルートを更新していない限り、ルートの最終パラメータには "id"という名前が付けられています(デフォルト)。つまり、/ specific/edit/5646-0767 -...のようなルートがある場合、メソッドのパラメータの名前に関係なく、キー "id"を持つルート値辞書にGUIDがマップされます。私は、この規則に従うとするメソッド定義を変更したい:

public ActionResult Edit(Guid id) 

あなたは明示的ルート・パラメータの名前を指定することで、この問題を回避することができますが、その後、あなたがどのように見えるのURLで終わる:/特定/編集?itemidの= 5646-0767 -...

+0

今私は尋ねて愚かな感じ:( – BinaryMisfit

+0

それについて心配しないでください - 私が答えを知っていた唯一の理由は、私は一度同じことをし、それを理解しなければならなかった。 – tvanfosson

4

(私はわからなかった)

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

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

    } 

は右に私を導い上記anwerいただきありがとうございます、それを必要とするかもしれない人のために以下のサンプルコードを置きます方向

関連する問題