私が想像するものは本当にばかげた問題であると苦労しています。「foreach」を使用して Knockout.JS のコレクションを反復処理しており、コレクション内の変数を使用して各項目のリンクを作成する必要があります。
問題は、ビュー モデルの変数を使用してその場で URL が生成され、これらを Knockout コレクションの変数と組み合わせる必要があることです。
Knockout ループを含むブロックを次に示します。
<div data-bind="foreach: pagedList" class="span8" style="border-bottom: 1px solid #0094ff;">
<div style="cursor: pointer;">
<p data-bind="text: hotelId"></p>
<p data-bind="text: name"></p>
<p data-bind="text: hotelRating"></p>
<p data-bind="text: propertyCategory"></p>
</div>
</div>
理想的には、'onclick="window.location=' メソッドを介して親 div へのリンクを追加したいのですが、Action.Link を使用して、文字列連結によって Knockout 変数を追加しようとしました。
<div style="cursor: pointer;" onclick="window.location="@Url.Action( "Index", "Hotel", new { regionId = Model.region.regionId, regionName = HttpUtility.UrlPathEncode(Model.region.regionNameLong.ToString().Replace(",","")).Replace("%20","-"), hotelId = " + hotelID() + ", hotelName = HttpUtility.UrlPathEncode(Convert.ToString(" + name() + ").Replace(",","")).Replace("%20","-") })"> </div>
しかし、これにより「オブジェクトがインスタンス化されていないというエラー」が発生します。次に、「data-bind="attr:」メソッドを使用して、最初に Knockout を使用してみました。
<a href="someurl" data-bind="attr: { href: '/Region/' + '@Model.region.regionId ' + '/' + '@HttpUtility.UrlPathEncode(Model.region.regionNameLong.ToString().Replace(",","")).Replace("%20","-") ' + '/' + hotelID() + '/' + '@HttpUtility.UrlPathEncode(Convert.ToString(" + name() + ").Replace(",","")).Replace("%20","-")' }, text: hotelId()"></a>
ここでもサイコロはありません。
これがクライアント側とサーバー側のパラダイムを混在させていることは知っていますが、Knockout を捨てずに別の方法を考えることはできません。
誰もこれについて経験がありますか?