Проблемы с созданием таблицы данных после передачи аргумента

Я беру ссылку с этого сайта. Но я внес небольшое изменение в это, я передаю аргумент, который получает BranchId. Я только хотел показать, какие из них находятся в отдельной ветке, но у меня возникла проблема с тем, как я могу вернуться с данными, поскольку у меня возникла ошибка.

Словарь параметров содержит пустую запись для параметра 'branchId' ненулевого типа 'System.Int32' для метода 'Void GetEmployeeLists(Int32)' в 'xxx (filelocation)'. Чтобы сделать параметр необязательным, его тип должен быть либо ссылочным типом, либо типом Nullable. Имя параметра: параметры

MyController

[WebMethod]
public void GetEmployeeLists(int branchId)
{
    var id = this._branches.GetById(branchId);
    string conn_str = ConfigurationManager.AppSettings["appDB"];
    List<EmployeeList> lstDatas = new List<EmployeeList>();
    string query = "SELECT " +
                @"el.id, " +
                @"el.name, " +
                @"el.role " +
                @"FROM employee_list el;"

    using (SqlConnection connection = new SqlConnection(conn_str))
    {
        connection.Open();

        using (SqlCommand command = new SqlCommand(query, connection))
        {
            command.CommandTimeout = 3000;
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    EmployeeList lstData = new EmployeeList();
                    lstData.Id = Convert.ToInt32(reader["id"]);
                    lstData.Name = reader["name"].ToString();
                    lstData.Role = reader["role"].ToString();
                }
            }
        }
        JavaScriptSerializer js = new JavaScriptSerializer();
        HttpContext.Response.Write(js.Serialize(lstDatas));
        connection.Close();
    }
}

MyView, который содержит скрипт

<script type="text/javascript">
    $(document).ready(function() {
        $.ajax({
        url: '<%=this.Url.Action("GetEmployeeLists", "Admin") %>',
            method: 'post',
            dataType: 'json',
            success: function(data) {
                $('#datatable').dataTable({
                    paging: true,
                    sort: true,
                    searching: true,
                    scrollY: 200,
                    data: data,
                    columns: [
                            { 'data': 'Id' },
                            { 'data': 'Name' },
                            { 'data': 'Role' },
                        ]
                });
            }
        });
    });
</script>

2 ответа

Решение

Я создал это таким образом, и я смог решить эту проблему. Однако я использовал наследуемое наследие, поэтому вам, возможно, придется изменить некоторые части.

<script type="text/javascript">
    $(document).ready(function() {
    var branchId = '<%=ViewData["branchId"]%>';
        $.ajax({
        url: '.../Admin/GetEmployeeLists', (Needs to change that as per your method location)
            method: 'post',
            dataType: 'json',
            data: {
                branchId: branchId
            },
            success: function(data) {
                $('#datatable').dataTable({
                    "bPaginate": true,
                    "bSearchable": true,
                    "sScrollY": "200px",
                    "aaData": data,
                    "aoColumns": [
                            { 'data': 'Id' },
                            { 'data': 'Name' },
                            { 'data': 'Role' },
                        ]
                });
            }
        });
    });
</script>

Также вам нужно добавить viewdata в ваш контроллер

public void GetEmployeeLists(int branchId)
{
...
ViewData["branchId"] = branchId;
}

Это не имеет ничего общего с базой данных. Как говорит ошибка:

Словарь параметров содержит пустую запись для параметра 'branchId' не обнуляемого типа 'System.Int32' для метода 'Void GetEmployeeLists(Int32)' в 'xxx (filelocation)

Ваш метод требует branchId параметр, но ваш код Javascript не прошел один:

url: '<%=this.Url.Action("GetEmployeeLists", "Admin") %>'

Вы должны пройти branchId параметр к действию, например:

url: '<%=this.Url.Action("GetEmployeeLists", "Admin", new { branchId = 123 }) %>'
Другие вопросы по тегам