0

MvcMusicStore tutroial から変更された私のテンプレート:

<script type="text/x-kendo-tmpl" id="template">
    <div class="product">
    <a href="@Url.Action("Details", "Store", new {id = ${ProductSubCategoryId} })">
         <img src="@Url.Content("${AlbumArtUrl}")" alt="${Title} image" />
             </a>
        <span><h3>${Title}</h3></span>

        <p>${kendo.toString(Price, "c")}</p>
    </div>
</script>

しかし、Url.Action メソッドにエラーがあります: Unexpected symbol '$'.

更新 1: そして、私は使用できません

@Model.First(d => d.ProductCategoryId.Equals(Convert.ToInt32("${ProductSubCategoryId}"))).ProductCategory.Name

しかし、同じコード

@Url.Content("${AlbumArtUrl}")

うまく動作します。

4

3 に答える 3

1

new {id = ${ProductSubCategoryId} }

これは無名オブジェクトの C# コードであり、C# は JS テンプレートについて何も知りません。したがって、その $ がそこで何をしているのかわからないというエラーが表示されます。通常、サーバー側でのみ利用可能な View モデルから何かを渡します。

new {id = Model.ProductSubCategoryId }

URL ヘルパーを使用する代わりに、 string だけを使用した方がよい場合がありますhref="Store/Details/${ProductSubCategoryId}"。それはまさにあなたが必要としているものではないかもしれませんが、ルーティングとテンプレートについて、これが意図したものであるかどうか、または ProductSubCategoryId が実際にモデルのプロパティであるかどうかを知るのに十分な知識がありません.

更新された例に関して:

Url.Content(その関数は、ページがサーバー上でレンダリングされているときにパラメーターを受け取り、HTML の文字列「${AlbumArtUrl}」をそのまま吐き出し、HTML には文字列「${AlbumArtUrl」が含まれるために機能します。 }" を追加して、JS テンプレートが後でクライアントで解析されるときに、その変数を解釈できるようにします。したがって、この場合、C# 関数は.Content(はそのテンプレート変数を理解する必要はありません。それは、HTML に埋め込む文字列に過ぎないからです。Chrome で F12 を使用してネットワーク タブで GET 応答を表示することをお勧めします。これにより、アクションから返された HTML ソースを確認できるため、各ステップで正確に何が起こっているかをよりよく理解できます。プロセス。返された HTML には、Url.Content のような C# コードがないことがわかりますが、"${AlbumArtUrl}" のような JavaScript テンプレートが表示されます。これらの値はサーバー側でレンダリングされないためです。

一方Convert.ToInt32("${ProductSubCategoryId}")、この関数は、渡される文字列がConvert.ToInt32("2134"). ToInt32 に関する限り、わかりました、「何か」が文字列であることがわかりました。文字列を数値として解釈しようとします。つまり、「456457」などの数字が含まれていると予想されますが、私には何の意味もない文字と記号の束があり、それを整数に変換することはできません。繰り返しますが、これはページを生成するときにサーバー上で実行される C# 関数であり、「${ProductSubCategoryId}」は JavaScript テンプレート変数であるため、C# にとっては何の意味もありません。

于 2013-01-15T23:02:02.447 に答える
0

Url.Action を使用することに決めた場合は、次の方法があります。これはハックですが、これを行うことができます:

<a href="@Url.Action("Details", "Store")?id=${ProductSubCategoryId}">
于 2013-07-06T15:39:34.063 に答える
0

サーバー側のコードとクライアント側のコードを混在させています。これは無効な C# コードです。

@Url.Content("${AlbumArtUrl}")

このようにヘルパーを使用して URL を生成することはできません。Url ヘルパーを使用せずに通常の方法を使用することをお勧めします。

于 2013-01-15T22:37:40.780 に答える