值在文本框中无法正确显示在第二个文本框中填充值基于在第一个文本框中选择的值,使用mvc3中的jquery和ajax

时间:2013-04-23 11:12:02

标签: asp.net-mvc-3 jquery

我正在使用mvc3中的小表格,其中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;
            }
        }

    }

1 个答案:

答案 0 :(得分:0)

您可以使用可以表示AcCodeDescrip的viewmodel(选项#1),或者如果您不想要额外的代码(附加类),则返回对象列表(选项) #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 }
        }))
    }
})