Javascript动态添加选项值

时间:2016-01-17 16:59:47

标签: javascript jquery html asp.net-mvc model-view-controller

我创建了一个选择标记的元素,但我想用我的模型数据填充它,但我不能这样做。

这是我的代码:

<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循环显示错误。

2 个答案:

答案 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变量。