2012-04-19 3 views
1

Indexアクションのために私はGuidを渡す必要がありますが、編集または削除アクションのためにチェックしているので、nullにする必要があります。MVCでパラメータをGuid.Emptyにデフォルト設定するにはどうすればよいですか?

私はこれを使用しましたが、コンパイルエラーが発生しました:Guidはnullを指定できません。コンパイル時定数でなければなりません。 またはランタイムエラー:

パラメータ辞書はSystem.Web.Mvc.ActionResult指数(可能System.String、システム」メソッドのパラメータ非NULL可能タイプの「UID」「可能System.Guid」のヌルエントリが含まれています.Guid) 'を' Mapping.Controllerers.HomeController 'に追加します。オプションのパラメータは、参照型、null可能型、またはオプションのパラメータとして宣言する必要があります。

public ActionResult Index(string userAction, Guid uid = new Guid()) 
     { 
---- 
---- 
} 
+3

nullable型のオプションパラメータを管理する方法についての回答はありますが、コントローラのインデックスアクションのパラメータに基づいてアクション(編集または削除)を選択するのは正しいですか?それは私にはあなたが専用のアクションを持っている必要があると聞こえます – themarcuz

+0

私はGUIDとしてuidを持っている場合、私はif(uid> 0) 現在、私は、(objModel.Id!= null)が動作していないかどうかを確認しています – Neo

+0

私はプロプライズの回答で答えました...しかし、ポイントは、私が理解する限り、間違ったアプローチに従っています – themarcuz

答えて

6

あなたのパラメータにnullableGuidを使用してみてください:あなたのコメントに基づいて

public ActionResult Index(string userAction, Guid? uid = null) 

objModel.IdGuidであると仮定すると、あなたが使用することができます。

objModel.Id != default(Guid) 

しかし、知っていますあなたの状況についてもっと今、私はthemarcuzさんのより良い全体的なソリューションのためにswer。

+0

0000-0000-0000-0000のようなデフォルト値を取っていませんnull :( – Neo

+0

私はGuidのようなuidを持っている場合、私はif(uid> 0)のようなやり方で編集や削除を行うことができますか? 現在、私はif(objModel.Id!= null) – Neo

0

このパラメータには、オプションとしてパラメータを指定できます。

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{guid}", // URL with parameters 
       new {controller = "DefaultController", action = "Index", guid = UrlParameter.Optional}); 

は、その後、あなたはindexアクションのパラメータとしてGUIDを持っている必要はありませんか、あなたは内の条件を評価する必要があり

Index()Index(Guid guid)

+0

どうすればいいですか?(uid> 0)してから、私たちがGUIDとしてuidを持っているときに編集または削除しますか? 現在、私はif(objModel.Id!= null)が動作していないかどうかを確認しています。 – Neo

+0

明確ではありませんが、デフォルトのアクションと、あなたがguidを期待するポストアクションを処理しようとしていると思います。それはまさに私があなたに提案していることです。あなたのデフォルトアクションではGUIDを期待していないし、あなたが投稿したときに同じアクションでGUIDを期待する。また、uidをguidとして解析し、必要に応じて処理を進めることもできます。 –

1

のように両方のアクションを持つことができます呼び出し元のViewを呼び出し、編集と削除の2つの異なるアクションを呼び出します。 (呼び出し側のビューで)そのような 何か:

@if (existGuid) 
{ 
    @Html.ActionLink("Edit", "Edit", new {myGuid = guid}) 
} 
else 
{ 
    @Html.ActionLink("Delete", "Delete") 
} 

そして、あなたのコントローラでは、あなたが別のアクションがあるでしょう:

public ActionResult Edit(Guid myGuid) 
{ 
    // do something here 
} 
public ActionResult Delete() 
{ 
    // do something here 
} 

私はどのようにあなたが何かを削除することができます理解していない場合でも、任意のパラメータを渡すことなく...

0

Guid?アクションメソッドのパラメータの代わりにGuid.Emptyの値をnullに設定したカスタムモデルのバインダを作成できます。

関連する問題