ASP.NET MVC AutoComplete - полагаться на более чем одно поле ввода - PullRequest
0 голосов
/ 12 апреля 2011

У меня работает функция автозаполнения 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();

    }

Помощник пользовательского интерфейса:

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 голосов
/ 13 апреля 2011

Будет ли второе поле ввода данных также заполняться автоматически или выпадающий список со списком компаний, например?

Я не уверен, как выглядит ваш объект 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...