从 @Html.DisplayFor 和 @Html.HiddenFor 获取值

Getting a value from @Html.DisplayFor and @Html.HiddenFor

本文关键字:@Html 获取 HiddenFor DisplayFor      更新时间:2023-09-26

HTML

    int i = 1;
    foreach (var item in Model.MyDataset)
    {
    <td class="tdBorder">
    @Html.DisplayFor(x => item.ID, new { id = "VisibleID" + @i })
    @Html.HiddenFor(x => item.ID, new { id = "HiddenID" + @i })
    </td>
    i += 1;
    }

jQuery

 for (i = 1; i <= rowCount; i++) {
            var myID_Visible = $.trim($("#VisibleID" + i).val());
            var myID_Hidden = $.trim($("#HiddenID" + i).val());
        }

我正在尝试学习一些MVC和jQuery。

有人会向我解释为什么打电话吗

var myID_Visible = $.trim($("#VisibleID" + i).val());返回一个空字符串,但

var myID_Hidden = $.trim($("#HiddenID" + i).val());返回我的 item.ID 值?

唯一的区别是第一个jQuery行引用@Html.DisplayFor(返回空字符串),而第二个jQuery行引用@Html.HiddenFor(返回实际值)。

为什么我无法从 @Html.DisplayFor 获取值?

因为@Html.DisplayFor()不呈现控件,并且不能使用.val()。而是使用

myID_Visible = $.trim($("#VisibleID" + i).text())

尽管这将取决于@Html.DisplayFor()呈现的 HTML(您是否使用显示模板?您需要检查生成的 html。

默认情况下DisplayFor将仅呈现属性的文本值。你需要做一些类似的事情

int i = 1;
@foreach (var item in Model.MyDataset)
{
  <td class="tdBorder">
    <span id="@i">
      @Html.DisplayFor(x => item.ID)
    </span>
    @Html.HiddenFor(x => item.ID, new { id = "HiddenID" + @i })
  </td>
  i += 1;
}

并在脚本中

myID_Visible = $.trim($('#' + i).text());

某些输入有 .html() 而不是 .val() 尝试:

var myID_Visible = $.trim($("#VisibleID" + i).html());

编辑

另一件事,删除 i 前面的 @,你已经在 C# 代码中

@Html.DisplayFor(x => item.ID, new { id = "VisibleID" + i })

原因在这个和那个中解释。但是,对于您的情况,我更喜欢这样:

.HTML

int i = 1;
foreach (var item in Model.MyDataset)
{
  <td class="tdBorder">
    <p id="VisibleID@(i)">@Html.DisplayFor(x => item.ID)</p>
    <p id="HiddenID@(i)">@Html.HiddenFor(x => item.ID)</p>
  </td>
i += 1;
}

所以在脚本中我们可以称之为:

for (i = 1; i <= rowCount; i++) {
    var myID_Visible = $("#VisibleID" + i).text();
    var myID_Hidden = $("#HiddenID" + i).text();
}

希望这能帮助你,干杯!

@Html.DisplayFor(x => item.ID, new { id = "VisibleID" + @i })

Rendred HTML 看起来像:

<span id="VisibleID1">item id value here</span>

@Html.HiddenFor(x => item.ID, new { id = "HiddenID" + @i })

呈现的 HTML 看起来像

<input type="hidden" id="HiddenID1" value="item id value here">

因此,为了显示您应该使用的值,$("#VisibleID1).html()如@Shadi