ASP.NET MVC自动完成 - 依赖于多个输入字段

时间:2011-04-12 18:50:56

标签: jquery asp.net-mvc autocomplete

我有jquery自动完成功能。即我输入一个字段,然后根据字段中输入的字符串返回数据。我的问题是我还想在确定我应该返回当前字段时使用另一个字段中键入的数据。例如,我只想返回属于某个公司的驱动程序。该数据在另一个字段中输入。如何修改以下代码以执行此任务?假设我有一个“Model.Company”属性。

查看(部分内容):

<%= Html.AutoCompleteTextBox2("DrvId", "DriverID", Model.DrvId, new { style = "width:200px;" })%>           


<%= Html.InitializeAutoComplete2("DrvId", "DriverID", "Driver ID", Model.DrCmpId, Url.Action("Drivers", "AutoComplete"), new { delay = 100, minChars = 1 }, true)%>

控制器:

public ActionResult Drivers(string q)
    {

        List<TmwXref> driverList = baseService.GetTypeList("Driver");

        for (var i = 0; i < driverList.Count; i++)
        {
            if (driverList[i].Value.StartsWith(q, StringComparison.OrdinalIgnoreCase))
            {
                Response.Output.Write("{0}|{1}\r\n", driverList[i].Value + " - " + driverList[i].Description, i);
            }
        }

        return new CancelViewResult();

    }

UI助手:

public static string InitializeAutoComplete2<T>(this HtmlHelper<T> html,
                     string textBoxName, string fieldName, string labelName, string fieldDesc, 
                     string url, object options, bool wrapInReady)
    {

        StringBuilder sb = new StringBuilder();
        if (wrapInReady) sb.AppendLineFormat("<script language='javascript'>");

        if (wrapInReady) sb.AppendLineFormat("$().ready(function() {{");
        sb.AppendLine();
        sb.AppendLineFormat("   $('#{0}').autocomplete('{1}', {{", textBoxName.Replace(".", "\\\\."), url);

        PropertyInfo[] properties = options.GetType().GetProperties();

        for (int i = 0; i < properties.Length; i++)
        {
            sb.AppendLineFormat("   {0} : {1}{2}",
                                    properties[i].Name,
                                    properties[i].GetValue(options, null),
                                    i != properties.Length - 1 ? "," : "");
        }
        sb.AppendLineFormat("   }});");
        sb.AppendLine();
        sb.AppendLineFormat("   $('#{0}').result(function(e, d, f) {{", textBoxName.Replace(".", "\\\\."));
        sb.AppendLineFormat("       $('#{0}').val(d[1]);", fieldName);
        sb.AppendLineFormat("    }});");
        sb.AppendLine();
        if (wrapInReady) sb.AppendLineFormat("}});");
        if (wrapInReady) sb.AppendLineFormat("</script>");
        return sb.ToString();

    }

    public static string AutoCompleteTextBox2<T>(this HtmlHelper<T> html, string textBoxName, string fieldName, string value, object htmlAttributes)
    {

        return string.Format("{0} {1}", html.TextBox(textBoxName, value, htmlAttributes), html.Hidden(fieldName));
    }

1 个答案:

答案 0 :(得分:0)

第二个数据输入字段是否也将自动完成,或者是一个包含公司列表的下拉列表?

我不确定你的 TmwXref 对象是什么样的,但我确定你会将你的驱动程序与公司联系起来。

如果它只是一个选择要过滤的公司的下拉列表,您可能只是做类似的事情:

public ActionResult Drivers(string q)
{
    var company = GetSelectedCompanyHere();

    List<TmwXref> driverList = baseService.GetTypeList("Driver");

    for (var i = 0; i < driverList.Count; i++)
    {
        if (driverList[i].Company == company && driverList[i].Value.StartsWith(q, StringComparison.OrdinalIgnoreCase))
        {
            Response.Output.Write("{0}|{1}\r\n", driverList[i].Value + " - " + driverList[i].Description, i);
        }
    }

    return new CancelViewResult();
}