我创建了一个选择标记的元素,但我想用我的模型数据填充它,但我不能这样做。
这是我的代码:
<select id=senderAdress" + element + " class=senderAdressText2> </select>
var element = 0;
while(element!==3){
var obj = document.getElementById("senderAdress"+element);
var opt = document.createElement("option");
opt.value=element+1;
opt.text = "@Html.DisplayFor(model=>model.Address[element].AddressName)";
element++;
}
这不起作用,因为在opt.text部分,你可以看到我想要到达我的模型的addressName,其中我的地址[element]。在我的最顶层,我创建了一个变量“element”,并将其指定为0。
问题是当我写地址[element]时,我收到一条告诉我的错误
当前上下文中不存在name元素,
但是你可以看到我在顶部分配它,如果无法访问,为什么我的while循环显示错误。
答案 0 :(得分:1)
您似乎试图将一些服务器端逻辑与客户端javascript混合使用。 $GIT_ALTERNATE_OBJECT_DIRECTORIES
变量是一个javascript变量。这意味着它仅存在于客户端上。另一方面,该模型是服务器端概念,它无法访问客户端变量。因此,如果您希望能够访问它们,可以考虑将这些服务器端值存储在javascript变量中:
element
当然,更好的解决方案是使用强类型var values = @Html.Raw(Json.Encode(Enumerable.Range(0, 3).Select(item => Html.DisplayFor(model => model.Address(item).AddressName).ToString())));
for (var i = 0; i < values.length; i++) {
var obj = document.getElementById('senderAdress' + i);
var opt = document.createElement('option');
opt.value = i + 1;
opt.text = values[i];
}
服务器端帮助程序直接在服务器上生成下拉列表。
答案 1 :(得分:0)
看起来你在Razor模板中混合了Javascript和C#。 C#部分无法访问Javascript部分中定义的varable。为什么不用C#做所有事情?
如果你想在JS中做到这一点,并且如果事先知道所有项目,则需要将模型中的所有值存储到JS数组中。在这种情况下,元素索引将对应于本地JS变量。