我正在努力解决我想象的一个非常愚蠢的问题。我正在使用“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>
但这给出了“对象未实例化错误”。其次,我首先尝试使用 Knockout,通过 'data-bind="attr:' 方法,如下所示;
<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,就想不出另一种方式。
有没有人有这方面的经验?