0

私は 2 つのフィールドを持つ mvc3 の小さなフォームに取り組んでいます。1 つはアカウント コード用で、2 つ目はアカウントの説明用です。
jqueryオートコンプリートテキストボックスを使用して、アカウントコードフィールドのSQL Server 2008 R2データベースからアカウントコードと説明のデータを取得しますが、テキストボックスに値が正しく表示されません。
以下は私のコードです。

$(function () {
        $("#AcCode").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Home/AutocompleteSuggestions", type: "POST", dataType: "json",
                    data: { term: request.term },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return { label: item.split('-')[0], value: item.split('-')[1] }
                        }))
                    }
                })
            },
            minLength: 1,
            select: function (event, ui) {
                if (ui.item) {
                    alert("You picked" + ui.item.label + "' with a value of " + ui.item.value);
                     $("#AcCode").val(ui.item.label),
                   $("#Descrip").val(ui.item.value);
                }
            }

        });
    });

アカウントコードフィールドに説明が表示され、説明フィールドには何も表示されません。この問題を解決するのを手伝ってください。説明欄に説明文、アカウントコード欄にアカウントコードを表示したい。

データベースからデータを取得する関数 public List GetAutoCompDataDAL(string Acode) {

        List<string> result = new List<string>();

        using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
        {
            using (SqlCommand cmd = new SqlCommand("select AcCode,Descrip from Account where AcCode like '%'+@AcCode+'%' order by AcCode asc", con))
            {
                con.Open();
                cmd.Parameters.AddWithValue("@AcCode", Acode);
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {

                    result.Add(string.Format("{0}-{1}", dr["AcCode"].ToString(), dr["Descrip"].ToString()));


                }
                con.Close();
                return result;
                //return result1;
            }
        }

    }
4

1 に答える 1

0

表現できるビューモデル (オプション #1) を使用できます。またはAcCodeDescripその余分なコード (追加のクラス) が必要ない場合は、オブジェクトのリストを返します (オプション #2):

// option #1 if you want a viewmodel
public class AccountModel {
    public string Code {get;set}
    public string Description {get;set;}
}
// then use it just like the following:
//
// instead of this
// List<string> result = new List<string>();
// do this:
// option #1
// var results = new List<AccountModel>();
// option #2 
var results = new List<object>();

while (dr.Read())
{
    var code = dr["AcCode"].ToString();
    var desc = dr["Descrip"].ToString();
    results.Add(new { code , desc });
}

次に、最後のusing句の後に、resultsオブジェクトを json として返します。

public ActionResult AutocompleteSuggestions() {
    return Json(results,JsonRequestBehavior.AllowGet);
}

そして、代わりに:

$.ajax({
    url: "/checkout/AutocompleteSuggestions", type: "POST", dataType: "json",
    data: { term: request.term },
    success: function (data) {
        response($.map(data, function (item) {
            return { label: item.split('-')[0], value: item.split('-')[1] }
        }))
    }
})

各フィールドを参照できます。

$.ajax({
    url: "/checkout/AutocompleteSuggestions", type: "POST", dataType: "json",
    data: { term: request.term },
    success: function (data) {
        response($.map(data, function (item) {
            return { label: item.code, value: item.desc }
        }))
    }
})
于 2013-04-23T12:26:01.493 に答える