2009-11-30 55 views
1

我有一个模型,Customers,其中我有一个列表属性PayHistory。我需要在ASP.NET MVC(C#)应用程序中使用jQuery将表与PayHistory对象绑定。在jQuery中访问模型对象

我绑定使用jQuery作为表:

<table width="100%" border="0" cellpadding="0" cellspacing="0"> 
    <tr> 
     <td> 
      <div id="PaidDate"> 
      </div> 
     </td> 
     <td> 
      <div id="PaidAmt"> 
      </div> 
     </td> 
    </tr> 
</table> 

<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     //Initialize the dynamic Value; 
     _dynId = 1; 
     var data= '<%= Model.PayHistory %>'; 
     if (data != null) { 
      for (i in data) { 
       var pay= data[i]; 
       $('#PaidDate').append('<div id="PaidDate' + _dynId + '" style="height:20px;padding-left:10px;">' + '<label>' + pay.paidDate+ '</label>'); 
       $('#PaidAmt').append('<div id="PaidAmt' + _dynId + '" style="height:20px;padding-left:10px;">' + '<label>' + pay.PaidAmount + '</label>'); 
       _dynId += 1; 
      } 
     } 
    }); 
</script> 

在上面的HTML,我试图访问列表对象PayHistory jQuery的,但它给了对象的类型。

如何访问jQuery中的对象来绑定表,如上面给出的HTML中一样?

回答

5

您必须做更多的工作才能将数据转化为JavaScript可以理解的形式。最简单的方法是将对象中的数据编码为JSON string,然后将其发送到data变量。

您可以手动执行此操作(通过创建此类的方法),或者由于您使用的是ASP.NET MVC,因此您可以使用Json method。但是,这必须在Controller中完成,而不是在View中完成。所以,我会将它添加到您的Model对象或通用View数据中。它可能作为Model对象的一个​​属性存在,它只调用原始值的Json方法并返回它。

C#

public string JsonPayHistory 
{ 
    get 
    { 
     return Json(PayHistory); 
    } 
} 

JS

var data = '<%= Model.JsonPayHistory %>'; 

你会想看一看返回的字符串。它将采用JSON格式,并且必须进行评估。您可以通过添加做到这一点:

data = eval(data); // usually a bad idea 

data = JSON.parse(data); // may require a library if browser doesn't support it 

现在,你应该有一个对象,它是类似于你的C#对象。您可以遍历它并按名称引用属性。如果您提供了您的PayHistory对象的基本结构,我可以给出更好的示例。

+0

我收到一个错误:名称'Json'在当前上下文中不存在。当我使用var data ='<%= Json(Model.PayHistory)%>';我需要在这里添加任何参考吗? – Prasad 2009-11-30 16:01:35

+0

看起来你必须将这个Json调用移动到控制器。由于其保护级别,不允许在视图中使用。我更新了我的答案以反映这一点。 – EndangeredMassa 2009-11-30 16:19:17

+1

+1,你也可以尝试'var data = <%= Model.JsonPayHistory%>;'并跳过eval。 – orip 2009-12-01 01:14:33

0

使用Json.NET进行.NET对象和类与JSON之间的各种转换。

2
var data= <%= new JavaScriptSerializer().Serialize(Model.PayHistory) %>; 
+0

是否有任何最简单的jquery选项来读取序列化的对象?我需要通过阅读json将值绑定到div .. – Prasad 2009-12-01 17:00:39

+0

得到了答案.. var data = <%= new JavaScriptSerializer()。Serialize(Model.PayHistory)%>; var payhistory = eval(data); – Prasad 2009-12-01 17:06:21