2

私は基本的なフラッシュカードアプリケーションを構築しています-セットにはカードと他のセットが含まれています。Set1> Set2> Set3のようなものに移動するとき、親の「セット」のそれぞれがそれぞれの詳細ページにリンクするようにします。詳細viewModelに「breadcrumbs」という文字列を渡します。この文字列には次のようなものが含まれています。

var stringBuilder = "";
            var parent = model.ParentSet;

            while (parent != null)
            {
                stringBuilder += "<li><a href=\"@Url.Action('Detail', 'Set', new {SetId = \" + parentSetId + \"}, null)'>" + parent.Name + "</a> <span class='divider'>/</span></li>";
                parent = parent.ParentSet;
            }
            model.Breadcrumbs =
                "<li><a href=\"@Url.Action('Index', 'Home')\">Home</a> <span class='divider'>/</span></li>" +
                stringBuilder + "<li class='active'>New Set</li>";
            model.Name = "New Set";

ただし、生成されるURLはリテラルであり、「@Url.Action」が含まれています。

誰かが私がこれを機能させる方法を知っていますか、またはそれを行うためのより良い方法がありますか?

4

2 に答える 2

1

ただそれを評価してください:

"<li><a href='" + Url.Action('Index', 'Home') + "'>..."
于 2013-02-12T20:55:01.090 に答える
0

ここで重要なのは、「あなたの見方はどうですか?」ということだと思います。

ビューがそのmodel.Breadcrumbsフィールドを使用している場合:

...
<div id="breadcrumbs">
    @model.Breadcrumbs
</div>
...

作成した文字列の@Url.Action呼び出しは実行されません。Razorエンジンは、モデル内のフィールドではなく、ビューファイルで見つかったコードで動作します。

次の2つのいずれかを行う必要があります。

  1. 作成する文字列に「@Url.Action(...)」を入力し、Url.Link()などを使用してサーバー側のURLを把握し、直接挿入します。

  2. (そしてこれはより良いです)ビューモデルの一部としてそれらの親をビューに渡し、ビュー内でそれらをループし、移動しながらタグを作成します。通常、htmlをモデルに入れたくはありません。モデルは、プレゼンテーションコードではなく、データを保持するためにあります。

于 2013-02-12T21:04:39.180 に答える