2

ASP.NET MVC ベータ版の ActionLink メソッドで奇妙な問題が発生しました。MVC フューチャーから Lambda オーバーロードを使用する場合、ViewData から取得したパラメーターを指定できないようです。

これを試すと:

<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %>

HTML に URL が空のリンクが含まれています。

    <a href="">upload new photo</a>

ただし、次のようにパラメーターをハードコーディングすると、次のようになります。

<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %>

出力には実際の URL が含まれています。

    <a href="/group/groupA/Photo/Upload">upload new photo</a>

これはおそらく ViewData の可視性と可用性に関係しており、Lambda がフレームワークの内部によって評価されるときに存在しないと思います。しかし、それは単なる推測です。

これを引き起こすために最初のサンプルで何か間違ったことをしているのですか、それともバグではありませんか?

更新: MVC フューチャーの最新バージョンを使用しています。これは一部の人に有効であることが指摘されています。私にはうまくいかないので、これは私がやっていることに特有のものだと思います。これは本当に困惑しているので、次に何を見るべきかについて誰か提案はありますか.

4

2 に答える 2

2

厳密に型指定されたアクションリンクが存在する Microsoft.Web.Mvc.dll のバージョンを更新しましたか。

どうやら、この dll はベータ リリース用に更新されているようです。機能が若干変更されている可能性があります。

私はちょうどこれを試しました

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %>

そしてそれはうまくいきました。

于 2008-10-19T13:00:51.177 に答える
0

わかりました、私は自分の問題が何であるかを理解しました。

どうやら、ビューで読み取ろうとしていたViewDataスロットを設定していなかったため、null値になってしまったようです。

事実上、私は次のように書いていました。

<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %>

この全体の究極のキッカーは、パラメーター(グループ名)がルーティングテーブルのデフォルトではない値を表すという事実だったと思います。

routes.MapRoute(
    "Group",  
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "View", Id = ""});

したがって、ルーティングルールによれば、プロパティgroupnameが存在する必要がありますが、goによれば、Lambda gropnameは省略されました(null)。その結果、MVCフレームワークはクエリを満たすルートを見つけることができず、nullを返すだけでした。

于 2008-10-20T01:56:09.883 に答える