2016-03-08 96 views
2

我想更新MVC视图中的表中的一列数据。 这是我想要更新的视图。自动刷新多个div MVC

<table class="table"> 
<tr> 

    <th> 
     @Html.DisplayNameFor(model => model.CurrentTemperature) 
    </th> 

    <th></th> 
</tr> 
@{int i = 1;} 
@foreach (var item in Model) 
{ 
    <tr> 
     <td align="center" @*id="@("current"+i)" data-id="@item.ID"*@> 
      <div id="@("current"+i)" data-id="@item.ID"> 
       @{Html.RenderAction("TemperatureUpdateDeviceList", new { idDevice = item.ID });} 
      </div>  
     </td> 

    </tr> 
    i++; 
} 
</table> 

我写了一个简单的脚本来更新div。只是为了尝试,我决定只更新id = current4的第四个div。

$(function() { 

    setInterval(function() { 
     var id = $(this).attr('data-id'); 
      $.ajax({ 
       url: '@Url.Action("TemperatureUpdateDeviceList")', 
       type: 'GET', 
       data: { idDevice: id}, 
      }).success(function (partialView) { 
       $('#current4').html(partialView); 
      }); 
    },3000); 
}); 

使用这种方法,因为所生成的URL是不正确的,我不能进行正确的请求。如何获得正确的网址?该TemperatureUpdateDeviceList函数定义为

注意:

public PartialViewResult TemperatureUpdateDeviceList(int idDevice) 
    {    
     return PartialView(temperatureModel); 
    } 
+0

Url.Action()生成的URL是什么?你在找什么网址? –

+2

你的基本网址是正确的,但你的'id'不会是('$(this)'不是元素)。没有必要给你div一个id属性。你可以使用类名得到所有的div,并使用'$ .each()'循环,你可以使用$(this).data('id')'和'$(this)。 html(partialView)' –

+0

它不返回参数:idDevice – Daniele

回答

3

您使用的var id = $(this).attr('data-id');将无法​​通过data-id值,因为$(this)不是你<div>元素。如果你想更新你所有的元素,然后将HTML改为

<div class="container" data-id="@item.ID"> 
    @{Html.RenderAction("TemperatureUpdateDeviceList", new { idDevice = item.ID });} 
</div> 

注意id属性是没有必要的。然后在脚本中使用

var url = '@Url.Action("TemperatureUpdateDeviceList")'; 

setInterval(function() { 
    $('.container').each(function() { 
     var id = $(this).data('id'); 
     var div = $(this); 
     $.get(url, { idDevice: id}, function(partialView) { 
      div.html(partialView); 
     }); 
    }); 
},3000); 
+0

非常棒!谢谢! – Daniele