Как поиск с использованием dropdownList является ASP.NET Core MVC - PullRequest
0 голосов
/ 07 июля 2019

У меня есть таблица, и я пытаюсь найти в ней, и она работает для всего, кроме той, которая была добавлена ​​с помощью dropdownList.

В базе данных они сохраняются как tinyint, поэтому при поиске почисло, это работает, но я хочу искать по слову.

Например, я использую этот код для их инициализации:

public enum Education : Int16
{
       PHD = 1,
}

Когда я ищу "1", он показываетрезультаты, в которых есть PHD, но когда я ищу "PHD", ничего не появляется.

Я использую ADO.NET для операций CRUD

это код для метода, который я используюв моем контроллере:

string connectionString = Configuration["ConnectionStrings:WebApplication7ContextConnection"];
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            //SqlDataReader
            connection.Open();
            string email = User.Identity.Name;
            SqlCommand command = new SqlCommand(email, connection);

            if(searchString == null)
            {
            string sql = "Select * From Teacher Where Email = '" + email + "' ORDER BY AddedOn DESC";
            SqlCommand command2 = new SqlCommand(sql, connection);

            using (SqlDataReader dataReader = command2.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    ContactUsMessage teacher = new ContactUsMessage();
                    teacher.Id = Convert.ToInt32(dataReader["Id"]);
                    teacher.Name = Convert.ToString(dataReader["Name"]);
                    teacher.Email = Convert.ToString(dataReader["Email"]);
                    teacher.Phone = Convert.ToString(dataReader["Phone"]);
                    teacher.education = (Education)Convert.ToInt16(dataReader["Education"]);
                    teacher.Message = Convert.ToString(dataReader["Message"]);
                    teacher.AddedOn = Convert.ToDateTime(dataReader["AddedOn"]);

                    teacherList.Add(teacher);
                }
            }
            }
            else
            {
                string sql = "Select * From Teacher Where Email = '" + email + "' AND education = '"+searchString+"' AND Message LIKE '%"+searchString+"%' OR Name LIKE '%" + searchString + "%' OR Phone LIKE '%" + searchString + "%'  ORDER BY AddedOn DESC";
                SqlCommand command2 = new SqlCommand(sql, connection);

                using (SqlDataReader dataReader = command2.ExecuteReader())
                {
                    while (dataReader.Read())
                    {
                        ContactUsMessage teacher = new ContactUsMessage();
                        teacher.Id = Convert.ToInt32(dataReader["Id"]);
                        teacher.Name = Convert.ToString(dataReader["Name"]);
                        teacher.Email = Convert.ToString(dataReader["Email"]);
                        teacher.Phone = Convert.ToString(dataReader["Phone"]);
                        teacher.education = (Education)Convert.ToInt16(dataReader["Education"]);
                        teacher.Message = Convert.ToString(dataReader["Message"]);
                        teacher.AddedOn = Convert.ToDateTime(dataReader["AddedOn"]);

                        teacherList.Add(teacher);
                    }
                }

            }


            connection.Close();
        }
        return View(teacherList);

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вы можете использовать выпадающий список Select2 (автозаполнение + комбинированный список), как показано ниже:

Вид:

@Html.DropDownListFor(m => m.StudentId, Enumerable.Empty<SelectListItem>(), "Please select", new { @class = "", /* @Value = 1*/ })

$(document).ready(function () {

    var student = $("#StudentId");

    //for Select2 Options: https://select2.github.io/options.html
    student.select2({
            language: "tr",//don't forget to add language script (select2/js/i18n/tr.js) 
                //dropdownParent: $('#yourModal'), //In order to make search box enabled when using Select2 on Bootstrap modal (otherwise remove "tabindex" from modal properties).
        //minimumResultsForSearch: Infinity, //permanently hide the search box
        minimumInputLength: 0, //for listing all records > set 0
        maximumInputLength: 20, //only allow terms up to 20 characters long         
        multiple: false,
        placeholder: "Seçiniz",
        allowClear: true,
        tags: false, //prevent free text entry
        width: "100%",

        ajax: {
            url: '/Grade/StudentLookup',
            dataType: 'json',
            delay: 250,
            data: function (params) {
                return {
                    query: params.term, //search term
                    page: params.page
                };
            },
            processResults: function (data, page) {
                var newData = [];
                $.each(data, function (index, item) {
                    newData.push({
                            //id part present in data 
                            id: item.Id,     
                            //string to be displayed
                            text: item.Name + " " + item.Surname
                    });
                });
                return { results: newData };
            },
            cache: true
        },
        escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
        //templateResult: formatRepo, // omitted for brevity, see the source of this page
        //templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
    });


    //You can simply listen to the select2:select event to get the selected item
    student.on('select2:select', onSelect)

    function onSelect(evt) {
        console.log($(this).val());
    }

        //Event example for close event
        student.on('select2:close', onClose)

        function onClose(evt) {
            console.log('Closed…');
        } 
});

Контроллер:

public ActionResult Create()
{ 
    return PartialView("_Create"); //DO NOT fill the dropdownlist in this method
}


public ActionResult StudentLookup(string query)
{
    var students = repository.Students.Select(m => new StudentViewModel
    {
        Id = m.Id,
        Name = m.Name,
        Surname = m.Surname
        //FullName = m.Name + " " + m.Surname //Sending "Name" and "Surname" in one parameter    causes "The specified type member 'FullName' is not supported in LINQ to Entities" error!
    })
    //if "query" is null, get all records
    .Where(m => string.IsNullOrEmpty(query) || m.Name.StartsWith(query)) 
    .OrderBy(m => m.Name);
    return Json(students, JsonRequestBehavior.AllowGet);
}

Надеюсь, это поможет ...

0 голосов
/ 07 июля 2019

для типа enum, числа хранятся в базе данных, и поиск выполняется на основе чисел в базе данных (enum), а когда отображается выпадающий список, отображается имя чисел (PHD).

Чтобы выполнить поиск по имени, у вас должна быть таблица с названием ниже, чтобы назвать ее

        public class Categories
        {
            public int Id { get; set; }
            public string Title { get; set; }
        }

И вы можете выполнять поиск по имени и Id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...