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获得价值?
答案 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)
this和that解释了原因。 然而,对于你的情况,我更喜欢这样:
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();
}
希望这可以帮助你,欢呼!