我在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})
两者都不奏效。我还需要在列中添加点击事件,但似乎无法找到方法。
答案 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);
});