0

ノックアウト.jsを使用してWebフォームに取り組んでいます。ある時点で、リストで選択した値に基づいて値を取得しますselect。viewModel 内に次のコードがあります。

        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; }
}

ID問題は、ajax リクエストがによって選択されたディスカバリ フォームのみを返すようにしたいのですが、selectedTemplate現在、すべての値が配列に返されていることです。そうすればいいと思いdata: "{ID: '" + discoveryFormID + "'}",ました。誰かがこれがなぜなのか、どのように修正するのかを説明できますか? C#側で何かをする必要がありますか? JavaScript、ajax、knockout.js は初めてです。

この問題を修正するには、クエリを次のようにする必要がありました。

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

以下の回答に従って、C#メソッドが変更されました。

4

1 に答える 1

1

あなたのサービスは次のように見える必要があります

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

そして、このパラメーターをクエリに使用する必要があります。

現在、セットを絞り込むものはありません。

于 2013-02-08T20:08:54.257 に答える