2

これが私のインデックスビュー(Index.cshtml)の関連部分です:

    @foreach (var item in Model) {
       <li>
            @Html.ActionLink(item.name, "Index", "Filler", new { cap = item }, null)
       </li>
    }

ご覧のとおり、ActionLinkはフィラーコントローラーのインデックスアクションに関連付けられており、アイテム全体(モデル)を渡します。「アイテム」のタイプは「カプセル」です。

さて、私のフィラーコントローラーで、インデックスアクションで:

        public ActionResult Index(capsule cap)
        {
            var fillers = db.fillers.ToList();
            return View(fillers);
        }

EntityFrameworkによって自動的に生成されたカプセルクラスは次のとおりです。

namespace CapWorx.Models
{
using System;
using System.Collections.Generic;

public partial class capsule
{
    public capsule()
    {
        this.fillers = new HashSet<filler>();
    }

    public int pk { get; set; }
    public string name { get; set; }

    public virtual ICollection<filler> fillers { get; set; }
}
}

問題は、上記のインデックスアクションで「cap」がNULLであるということです。ただし、タイプを「capsule」ではなく「object」に変更すると、null以外の奇妙なデータが取得されますが、オブジェクトを「capsule」にキャストできません。これがNULLである理由を誰かが知っていますか?

ありがとう、

マイク

4

4 に答える 4

3

id通常は、アクションに渡す必要があります。たとえば、コードをリファクタリングして、を取り込み、capsuleIddbからカプセルを取得し、必要な処理を実行できるようにすることはできますか。オブジェクト全体をルート値に追加しActionLinkても意味がありません。生成されているリンクを見てください。...?cap=Namespace.Capsuleおそらく、オブジェクトがToString編集されたようなものです。

于 2013-01-12T22:38:52.987 に答える
0

最初の問題は、MVCでインターフェイスにバインドできないことです(ICollection)。リストに変更する必要があります- List<filler>。あなたが直面する2番目の問題は、リスト/配列が適切な投稿のために配列表記で表される必要があるということですname="books[0].book_id"。MVCは多くの魔法を実行しますが、リンク内のモデルは、最終的にはクエリ文字列として表現する必要があります。

何をしようとしているのかによっては、モデルをJSONオブジェクトとして表現し、.ajax()で投稿したほうがよい場合があります。

他のアイデアについては、このSO投稿を参照してください-SpringMVCフォームを使用したSetのバインドについてサポートが必要です

于 2013-01-12T22:33:44.333 に答える
-1

なぜこれが機能するのか完全にはわかりませんが(html属性を無効にしていると思います)、アクションリンクの「null」部分を削除してみてください。

または、モデルを作成したコントローラーが間違っています。

繰り返しますが、これで私を殺さないでください。

于 2013-01-12T21:45:12.137 に答える
-1

@Html.ActionLinkアンカー要素()を生成するだけなので、完全なオブジェクトをパラメーター<a href="...">...</a>にバインドしようとしても意味がありません。routeValues@manojldsが言うように、とにかくルックアップを実行するので、関連するキー値を渡す方がはるかに理にかなっています(Webは「ステートレス」であることを忘れないでください)。

于 2013-01-12T22:45:01.037 に答える