0

ビューの 1 つに次のコードがあるとします。

@Html.Action("Grid", "Product", new { section = SectionType.Product })

Gridこれにより、 my のアクション メソッドが呼び出されますがProductController、これはまったく問題ありません。Grid メソッドが次のように定義されている場合:

public ActionResult Grid(SectionType section) { ... }

次に、要求したとおり、sectionパラメータに が入力されます。SectionType.Productただし、次のように、メソッド宣言にパラメーターを入れない場合:

public ActionResult Grid() { ... }

その後、sectionビューに設定された値は完全に消えたようです。にはありませRequest.ParamsRequest.QueryString。 にもありません。実際、どこにも見つからないようです。

この値がどうなるか誰か教えてもらえますか? どこからでも取得できますか? メソッドがパラメーター リストで要求しない場合、MVC はそれを完全に破棄しますか?

4

2 に答える 2

2

のRouteValueDictionary Valuesコレクションを介して、ルートから抽出された任意RouteDataのパラメータにアクセスできますRequestContext

var section = Request.RequestContext.RouteData.Values["section"];

それが必要な列挙型 (つまりSectionType) にボックス化されるobjectか、それとも単にstring( にボックス化されるobject) であるかどうかはわかりませんが、列挙型に適切に自分でキャストする必要があります。

パラメータの値を取得できるセグメントを含むルートがない場合は、sectionに格納し、Request.QueryStringからアクセスできるようにする必要がありますRequest.QueryString["section"]。また、この場合、生成された html は次のよう...?section=SomeSectionになりますが、適切なルートがある場合は次のようになります。.../SomeSection

于 2013-03-12T00:20:49.677 に答える
0

SectionTypeは列挙型だと思います。はいの場合、アクションに一致するパラメーターが見つからないとエラーが発生します。

// throw exception if you don't pass section value
public ActionResult Grid(SectionType section) { ... }

パラメーター ディクショナリに、'MvcApplication1.Controllers.HomeController' のメソッド 'System.Web.Mvc.ActionResult Index(MvcApplication1.Controllers.SectionType)' の null 非許容型 'MvcApplication1.Controllers.SectionType' のパラメーター 'section' の null エントリが含まれています。 '。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

上記のメッセージから、アクションに一致するパラメーターが見つからず、パラメーターがnon-nullableタイプである場合、例外が発生します。

次のようにアクションを変更すると:

// nullable SectionType
public ActionResult Grid(SectionType? section) { ... }

また

// default value
public ActionResult Grid(SectionType section = SectionType.Area) { ... }

タイプの場合、アクションは値が null で呼び出されsectionます。デフォルト値がある場合、アクションは値が nullで呼び出されますが、アクションではデフォルト値が使用されます。nullablesectionsectionsection

于 2013-03-12T00:14:17.420 に答える