这是我的模特

public class AddressBook
{
    public string UserId { get; set; }
    public IList<Address> Addresses { get; set; }
    public AddressBook()
    {
        UserId = "";
        Addresses = new List<Address>();
    }
}

public class Address
{
    public string Company { get; set; }
    public string Title { get; set; }
    public string FName { get; set; }
    ...
 }


控制器使用地址列表构建AddressBook。
主页使用AddressBook模型(@model mymodel.AddressBook),我可以使用Model.Addresses [index]访问不同的地址。

在页面上,我用“编辑”按钮显示每个地址的列表(为清楚起见,我删除了html代码):

@model mymodel.AddressBook
...
@for (int i = 0; i < Model.Addresses.Count; i++)
{
    @Model.Addresses[i].Company
    @Model.Addresses[i].FName
    ...
    @:<input type="image" src="/images/edit.gif" onclick="addressEdit('@i'); return false;" title="Edit" />

}


当用户单击编辑按钮时,我将调用javascript addressEdit并将其传递给所选地址的索引。

<script type="text/javascript">
    function addressEdit(index) {
        $('#FName').val('@Model.Addresses[index].FName');
        $('#Addr1').val('@Model.Addresses[index].Company');
        ...
    }
</script>


问题出在jQuery行$('#FName')。val('@ Model.Addresses [index] .FName');在VS2012中,变量索引在红色下划线标有消息“当前上下文中不存在名称'索引'”。

如何传递“索引”上的值以提取所需的数据?

最佳答案

用一些类名将元素包装在一个范围内。也将循环中的所有内容包装为div。我还要从标记中删除onclick方法,因为我们将以unobtrusive方式进行操作。

@for (int i = 0; i < Model.Addresses.Count; i++)
{
  <div class='entry'>
     <span class='spanAddress'> @Model.Addresses[i].Company </span>
     <span class='spanFName'> @Model.Addresses[i].FName </span>
     <img src="/images/edit.gif" class='editLink' />
  </div>
}


现在在您的JavaScript中

$(function(){

  $(".editLink").click(function(e){

     e.preventDefault();
     var _this=$(this);
     var fname=_this.closest("div.entry").find(".spanFName").html();
     var add=_this.closest("div.entry").find(".spanAddress").html();

     $('#FName').val(fname);
     $('#Address').val(add);

  });

});

10-05 21:53