Проблемы с созданием таблицы данных после передачи аргумента
Я беру ссылку с этого сайта. Но я внес небольшое изменение в это, я передаю аргумент, который получает 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 }) %>'