0

データベースにこのテーブルがあります:

http://i.stack.imgur.com/C7CWX.png

そして、このコードで繰り返しなしで「音楽」のすべての値を表示します(View):

@foreach (var item in Model.Select(m => m.music).Distinct())
{
    <tr>
        <td>
            @Html.ActionLink(item, "Deep", ViewData["item"])
        </td>
    </tr>
}

結果:

Jazz
Disko
Rock
Metal

そして、'Jazz' を押すと、結果は 'Miles'、'Kirk' などになりました。ビューからコントローラーに値を渡すことができると思いますが、私の状況ではどうすればよいかわかりません。私を助けてください

コントローラーでのアクション (例):

    public ActionResult Deep(string music)
    {

        var res = (from m in d.table where m.music == music select m);
        return View(res);
    }
4

2 に答える 2

0

ビューからコントローラーに直接値を渡すことはできません。ユーザーが Web サーバーに最初のページを要求すると、Web サーバー (ASP.NET) は呼び出すアクションを判断します。そのアクションはデータを収集し、そのデータを (ビュー モデル、ViewBag、ViewData、または TempData を使用して) レンダリングのためにビューに送信します。この場合のレンダリングは、データが HTML (実際には CSS、JavaScript など、これをバイト配列として見てください) に変換され、Web ページとして解釈されるクライアント (ブラウザー) に送信されるプロセスです。ユーザーはあなたのリンクを見て、それをクリックすると、Web サーバーに新しいリクエストを送信し、このプロセスが繰り返されます。

リンク用のコードを作成しています: @Html.ActionLink(item, "Deep", ViewData["item"])

最初のパラメーター項目はリンク テキストです。「Deep」は、現在のコントローラーで呼び出すアクションの名前です。3 番目のパラメーターはオブジェクト型です。この 3 番目のパラメーターは、Deep アクションのパラメーターと同じ型である必要があり、データを渡すには次の表記を使用する必要があります。

@Html.ActionLink(item, "Deep", new { idItem = item.IdMusic, foo = "bar" })

前の例では、ASP MVC は、「Deep」アクションにパラメーター idItem と foo があることを想定しています。

注意すべきことの 1 つは、クライアント/ユーザーが Web サーバーに要求を行っていることです。彼は、あなたが試みたようにオブジェクトを送信できません。代わりに、オブジェクトの一意の識別子 (idMusic) を送信し、要求に応じてデータベース/キャッシュ/セッションから取得します。

これが役に立てば幸いです、ズラティボール

于 2012-04-29T18:51:43.757 に答える
0

あなたの Actionlink は、あなたが望むことを完全に行っていません。生成されたリンクにカーソルを合わせると、それぞれに異なるコントローラーの名前が付けられると思います!

http://msdn.microsoft.com/en-us/library/dd505070.aspx

代わりにこのバージョンを見てください

http://msdn.microsoft.com/en-us/library/dd493066.aspx

@Html.ActionLink(item, "Deep", "YourController", new {id= ViewData["item"]})

そして、次のようなコントローラーアクション

public ActionResult Deep(int id)
{
  //Do something
}
于 2012-04-29T18:40:16.263 に答える