Md.Ashraf Ali Ответов: 2

Как использовать ajax auto complete extender в asp.net-что?


Я пытаюсь искать данные из базы данных, но не могу получить результат.Пожалуйста, может ли любое тело помочь мне.
спасибо заранее

<asp:TextBox ID="txtlicense" runat="server"></asp:TextBox>
 <ajax:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtlicense"

 MinimumPrefixLength="1" EnableCaching="true" ServicePath="WebService.asmx"

  ServiceMethod="GetLicense" CompletionInterval="100"

  CompletionSetCount="10" >
  </ajax:AutoCompleteExtender>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    public WebService () {

        //Uncomment the following line if using designed components
        //InitializeComponent();
    }

    [WebMethod]
    public List<string> GetLicense(string prefixText)
 {
     SqlConnection con = new SqlConnection("Data Source=.;Integrated Security=True;Initial Catalog=LicenseManagementSystem");
        con.Open();
        SqlCommand cmd = new SqlCommand("select LicenseNumber from LicenseDetails where LicenseNumber like @license+'%'", con);
        cmd.Parameters.AddWithValue("@license", prefixText);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        List<string> license = new List<string>();
        for (int i = 0; i < dt.Rows.Count; i++)

        {

            license.Add(dt.Rows[i][1].ToString());

        }

        return license;

    }

}

2 Ответов

Рейтинг:
2

Md.Ashraf Ali

На самом деле он прекрасно работает на другой странице .aspx, но то же самое, что я хочу использовать, тогда ничего не происходит?

Рейтинг:
1

JIYAUL MUSTAPHA

/*Код для расширителя autocomlete для заполнения текстового поля*/

/*Веб-метод получения нашего результата из базы данных*/
[WebMethod]
public string[] GetCompletionList(string prefixText, int count)
{

//ADO.Net
SqlConnection cn = новый SqlConnection();
DataSet ds = новый набор данных();
DataTable dt = новый DataTable();

String strCn = "источник данных=db;начальный каталог=dbb;идентификатор пользователя=sa;пароль=dd@123";
cn.ConnectionString = strCn;
SqlCommand cmd = новая команда SqlCommand();
УМК.Соединение = cn;
УМК.Свойство Commandtype = Значение Commandtype.Текст;
УМК.Свойства commandtext = "выбрать наименование из tbl_EmpMaster где (имя как '%' + @получающий myparameter + '%') и (метод isactive=1)";
cmd.параметры.AddWithValue("@myParameter", prefixText);
пробовать
{
спицы.Открыть();
УМК.Метод executenonquery();
SqlDataAdapter da = новый SqlDataAdapter(cmd);
да.Заполнить(ДС);
}
поймать (исключение бывший)
{

возвращает 0;
}
наконец
{
спицы.Рядом();
}
dt = ds.таблицы[0];

//Затем верните список строк(txtItems) в качестве результата
Список<строка> У txtItems = новый список<строка&ГТ;();
Строковые значения dbValues;

по каждому элементу (объекта datarow Row в ДТ.Строк)
{
//Строка из базы данных(dbValues)
dbValues = строка["имя"].Метод toString();
//dbValues = dbValues();
txtItems.Добавить(dbValues);

}
верните txtItems.Метод toArray();

}


/*Код страницы Aspx*/





Поиск По Имени :
АСП:текстовое поле с ID="txtSearchname" атрибут runat="сервер" класс="форма-входной контроль-см м-bot15"
Метода ontextchanged="txtSearchname_TextChanged" autopostback элемента управления="истина", шрифт-жирный="истинный"

АСП:AutoCompleteExtender атрибут runat="сервер" BehaviorID="AutoCompleteEx1" идентификатор="autoComplete1"
TargetControlID="txtSearchname" ServicePath="../AutoCompleteText.asmx"
ServiceMethod="GetCompletionList" MinimumPrefixLength="1" CompletionInterval="100"
EnableCaching="true" CompletionSetCount="10" CompletionListCssClass="autocomplete_completionListElement "
CompletionListItemCssClass="autocomplete_listItem" CompletionListHighlightedItemCssclass="autocomplete_highlightedListItem"
ShowOnlyCurrentWordInCompletionListitem="true"





CHill60

Причины моего понижения голоса:

1. это решение подвергает код риску SQL-инъекция[^] несмотря на ваш комментарий "//- - - - - я определил параметр вместо прямой передачи значения, чтобы предотвратить sql-инъекцию--------//"
Эта строка кода должна гласить:

cmd.CommandText = "select Name from tbl_EmpMaster WHERE Name LIKE '%@myParameter%') AND (IsActive=1)";


2. Вы также слепо отбрасываете любую информацию о любых ошибках, возникающих при использовании
catch
 {
 }
Это очень плохая практика кодирования

Richard Deeming

"... WHERE Name LIKE '%' + @myParameter + '%' ..."

Код из решения таков (почти) правильный. Единственная проблема-это неправильно подобранные скобки.

"... WHERE Name LIKE '%@myParameter%' ..."

Ваша версия будет искать записи, содержащие литеральную строку "@myParameter", нет значение параметра.

CHill60

Даже с помощью

cmd.Parameters.AddWithValue("@myParameter", prefixText);
- Я никогда им не пользовался. + раньше при добавлении параметров (хотя это было уже давно)

Richard Deeming

Да. Код в решении добавляет '%' до начала и конца параметра, но не уязвим для SQLi. Код в вашем комментарии вообще не использует этот параметр. :)

Альтернативой было бы добавить префикс и суффикс к значению параметра в C#:

cmd.CommandText = "select Name from tbl_EmpMaster WHERE (Name LIKE @myParameter) AND (IsActive=1)";
cmd.Parameters.AddWithValue("@myParameter", "%" + prefixText + "%");

CHill60

Кстати, спасибо за информацию - я забыл вернуться и сказать об этом. Мне определенно нужно освежить свои знания о .NET.

Richard Deeming

Вы добавили отсутствующую скобку, но теперь удалили ее. WHERE ключевое слово, поэтому ваш код все равно не будет работать.