2013-02-08 92 views
0

我正在使用knockout.js在webform上工作。有一次,我得到一个基于select列表中所选值的值。我有视图模型中的以下代码:用jquery-Ajax请求返回特定值

 self.discoveryForms = ko.observableArray([]); 
     self.selectedTemplate = ko.observable(); 
     self.selectedDiscoveryForm = ko.observable(); 

     //behaviors 
     self.selectedTemplate.subscribe(function (newValue) { 
      console.log(newValue.DiscoveryFormID()); 

      self.GetDiscoveryForms(newValue.DiscoveryFormID()); 
     }); 

     self.GetDiscoveryForms = function (discoveryFormID) { 
      console.log(discoveryFormID); 
      $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       data: "{ID: '" + discoveryFormID + "'}", 
       url: ("Default.aspx/GetDiscoveryForms"), 
       dataType: "json",      
       success: function (response) { self.FindDiscoveryForms(response), console.log(response)} 
       }); 
     } 

     self.FindDiscoveryForms = function (response) { 
      ko.mapping.fromJS(response.d, null, viewModel.discoveryForms); 
      ko.applyBindings(viewModel); 
     } 

C#的,从实体获得的数据是这样的:

[WebMethod] 
public static List<DiscoveryForm> GetDiscoveryForms(){ 
    List<DiscoveryForm> discoveryForms = new List<DiscoveryForm>(); 

    using (IntranetContainer db = new IntranetContainer()) 
    { 
     discoveryForms = db.DiscoveryForms.Select(x => new DiscoveryForm() 
     { 
      ID = x.ID, 
      Name = x.Name, 
      Welcome = x.Welcome, 
      WelcomeNote = x.WelcomeNote, 
      WelcomeBack = x.WelcomeBack, 
      WelcomeBackNote = x.WelcomeBackNote 
     }).ToList(); 
    } 

    return discoveryForms; 
} 

public class DiscoveryForm 
{ 
    public long ID { get; set; } 
    public string Name { get; set; } 
    public string Welcome { get; set; } 
    public string WelcomeNote { get; set; } 
    public string WelcomeBack { get; set; } 
    public string WelcomeBackNote { get; set; } 
} 

的问题是,当我想Ajax请求只返回发现形式由selectedTemplate选择ID,它目前将所有值返回到数组中。我认为data: "{ID: '" + discoveryFormID + "'}",会这样做。有人可以向我解释为什么这是,以及如何解决它?我应该在c#端做些什么?我是JavaScript,ajax和knockout.js的新手。

要解决这个问题,查询必须看起来象:

data: "{'id':"+discoveryFormID + "}", 

和C#方法是根据下面的答案改变。

回答

1

您的服务必须像

public static List<DiscoveryForm> GetDiscoveryForms(int[] ids){ 

然后这个参数必须用于查询。

现在你没有任何东西来缩小你的设置。

+0

很酷。我怀疑这是这方面的事情。我仍在调整它,但这似乎让我朝着更好的方向发展。 – ijb109 2013-02-08 20:13:59