0

我正在 mvc3 中处理一个带有 2 个字段的小表单,1 个用于帐户代码,第二个用于帐户描述。
我使用 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),AcCode或者Descrip如果您不想要额外的代码(附加类),则返回对象列表(选项#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 回答