【问题标题】:Set ID for column in foreach loop in MVC4在 MVC4 的 foreach 循环中为列设置 ID
【发布时间】:2015-02-27 11:09:17
【问题描述】:

我正在像这样在 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})

两者都不起作用。我还需要在列中添加一个点击事件,但似乎也找不到这样做的方法。

【问题讨论】:

  • 除非您创建了自定义显示模板,否则@Html.DisplayFor() 只会输出值(而不是元素)。将其添加到封闭的&lt;td&gt; 元素
  • DisplayFor HtmlHelper只生成文本,所以不能为文本设置ID。

标签: jquery asp.net-mvc-4


【解决方案1】:

@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);

     });
});

希望这能解决你的问题。

【讨论】:

    【解决方案2】:

    更新

    为模型中的每个项目添加一个 Id,并为每个行设置行 id 属性等于该项目。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);
    });
    

    【讨论】:

    • 这让我成功了,但设置值不起作用。 function changeval(id) { $("#status" + id).html('changed');按钮发送我设置为 的列/行的 id
    • 渲染到 "status+1" 而不是 "status1" 假设 id 是 1 并且 $("#status" + id) 是 "status1"
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签