无法动态地在HTML ID / Class元素内写入razor变量

时间:2014-02-20 16:00:47

标签: jquery html css asp.net-mvc razor

我一直在尝试通过创建按钮(避免收费)来更新我的MVC网站(它使用GMAPS API)来更新行程距离。这个想法如下

按下按钮之前: 里斯本 - 马德里:4小时30分,500公里 马德里 - 巴黎:9点15分1000公里

按下按钮后: 里斯本 - 马德里:6:50 550公里 马德里 - 巴黎:13:55,100公里

为此,我编写了以下代码:

点击按钮之前:

<div id="collapse2" style="display:none">
@{
   TripData ThisTripData = new TripData();//A structure created inside @functions{}
   ThisTripData = GetDistanceAndTime(false);

   int MyLength = ThisTripData.HoursList.Count();
   for (int j = 0; j < MyLength; j++) {
      if (Model.ElementAt(j).Trip == Model.ElementAt(j + 1).Trip) {
         <p></p>
         <span id="A@(j)">@ThisTripData.DistanceList.ElementAt(j)</span> <span> Km in </span> <span id="B@(j)">@ThisTripData.HoursList.ElementAt(j)</span><span>:</span><span id="C@(j)">@ThisTripData.MinutesList.ElementAt(j).ToString("00")</span><span> h </span>
       }
   }
}
</div>

我们的想法是通过按下&#34;避免收费来更新这些&#34; id&#34;按钮。如您所见,我刚刚创建了多个ID:A0,B0,C0,A1,B1,C1等...

点击按钮(javascript)后:

@{
   TripData ThisTripData3 = new TripData(); //A structure created inside @functions{}
   ThisTripData3 = GetDistanceAndTime(true);
}

for (var i=0;i<@(ThisTripData3.HoursList.Count());i++) {
   if (i==0) {
      $('#A0').text('@ThisTripData3.DistanceList[0].ToString("00")');
      $('#B0').text('@ThisTripData3.HoursList[0].ToString("00")');
      $('#C0').text('@ThisTripData3.MinutesList[0].ToString("00")');
   }
   if (i==1) {
      $('#A1').text('@ThisTripData3.DistanceList[1].ToString("00")');
      $('#B1').text('@ThisTripData3.HoursList[1].ToString("00")');
      $('#C1').text('@ThisTripData3.MinutesList[1].ToString("00")');
   }
   if (i==2) {
      $('#A2').text('@ThisTripData3.DistanceList[2].ToString("00")');
      $('#B2').text('@ThisTripData3.HoursList[2].ToString("00")');
      $('#C2').text('@ThisTripData3.MinutesList[2].ToString("00")');
   }
}

使用此解决方案的问题:

1)我只有3次旅行才能得到好结果。当我有2次旅行时,浏览器会向我发送超出范围的&#34;索引&#34;之后第一行出错。显然,浏览器在计算剃刀变量值之前检查它是否会实际通过该行。

2)我无法进行循环播放。为了避免造成这3个令人讨厌的问题...原因是我无法使用“我”。 razor里面的javascript变量。

我想声明我可能混合服务器端(Razor)和客户端(javascript)。我也知道不应该在@functions中创建ThisTripData结构,而应该在模型中创建一个模型。但是,我真的无法理解这对我有什么帮助。即使使用@Model,我仍然会被迫混合使用javascript和razor,这样我就可以使用$(&#39;#A2&#39;)。text()。正确?

更新:我试图在以下stackoverflow中以更简单的方式询问它Post

0 个答案:

没有答案