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

Set ID for column in foreach loop in MVC4

我正在 MVC4 中生成一个 table,如下所示:

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

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

我累了

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

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

这两个都不行。我还需要向该列添加一个点击事件,但似乎也找不到方法。

已更新

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

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

并进行更新(假设您收到一个 json 和一个新的状态值)

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

@Html.DisplayFor(model=>item.something) 不能直接设置Id。如果你想 使用带有 id 的 @Html.DisplayFor(model=>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);

     });
});

希望这能解决您的问题。