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

时间:2014-12-11 07:06:27

标签: javascript jquery asp.net-mvc asp.net-mvc-4

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获得价值?

4 个答案:

答案 0 :(得分:2)

由于@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());

答案 1 :(得分:1)

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

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

编辑

另外,在i之前删除@,你已经在C#代码

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

答案 2 :(得分:0)

@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">

因此,为了显示价值,您应该使用{@ 1}},如@Shadi所述

答案 3 :(得分:0)

thisthat解释了原因。 然而,对于你的情况,我更喜欢这样:

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();
}

希望这可以帮助你,欢呼!