为 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);
});
});
希望这能解决您的问题。
我正在 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);
});
});
希望这能解决您的问题。