在MVC4中为foreach循环中的列设置ID

时间:2015-02-27 11:09:17

标签: jquery asp.net-mvc-4

我在MVC4中生成一个表格,如下所示:

 foreach(var item in model.details)
 {
    <tr>
       <td>
           @item.status
       </td>
    </tr>
  }

我的问题是,如何为该状态字段分配ID?我想要做的是使用jQuery和AJAX来修改数据库中的值并返回新状态,并仅使用新状态更新该行中的那一列,而不必刷新整个列表。我认为这是唯一的方法,但如果有更好的方法,请告诉我。

我累了

@Html.DisplayFor(model=>item.status, new { @id = "status@item.status"})

@Html.DisplayFor(model=>item.status, new { @id = "status" + @item.status})

两者都不奏效。我还需要在列中添加点击事件,但似乎无法找到方法。

2 个答案:

答案 0 :(得分:1)

@ Html.DisplayFor(model =&gt; item.something)无法直接设置ID。如果你想  使用带有id的@ Html.DisplayFor(model =&gt; item.status)你将需要一些助手。

这已在此处解释 - Html.DisplayFor — Is it possible to have this control generate an ID

其他明智的方法是 -

 foreach(var item in model.details)
     {
        <tr>
           <td id="status_@Html.Raw(item.status)" class="Clickable_td_class">
               @item.status
           </td>
        </tr>
      }

如果您在多行中拥有共同状态,则需要更改您的ID唯一身份。你可以这样做 -

foreach(var item in model.details.Select((x, i) => new { Data = x, Index = i + 1 }))
     {
        <tr>
           <td id="status_@Html.Raw(item.Data.status)_@Html.Raw(item.Index )" class="Clickable_td_class">
               @item.Data.status
           </td>
        </tr>
      }

请在ID中使用@Html.Raw(item.status)代替@item.status

然后你可以写下你的jquery -

$("Clickable_td_class").click(function(){
    var current_Id = "#" + $(this).attr("Id");
    $.ajax({
        // All ajax params 
        // and  on success just replace html of particular element as -
        // $(this).html(your success reponse);
        // OR
        //$(current_Id).html(your success reponse);

     });
});

我希望这能解决你的问题。

答案 1 :(得分:0)

已更新

在模型中为每个项添加一个Id,并为每个行设置行id属性等于此item.Id:

   foreach(var item in model.details)
     {
        <tr id='@item.Id'>
           <td id="staus_@item.Id">
               @item.status
           </td>
        </tr>
      }

对于更新(假设你收到一个带有id的json和一个新的状态值)

$ajax(...).done(function(data){    
  $('#status_' +  data.id).html(data.status);
});