我一直在尝试通过创建按钮(避免收费)来更新我的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