Я хочу создать сетку или таблицу, которая принимает несколько данных, как мы это делаем в веб-формах ASP.NET.
Появится форма с полями Name, FName, Class и Gender и текстовым полем, включая кнопку «Добавить» в конце формы для добавления данных в таблицу/сетку.
Сетка/таблица будет иметь столбцы с теми же именами, что и имена полей. Сетка/таблица будет находиться под формой, а под таблицей/сеткой будет кнопка «Сохранить». Когда я нажимаю кнопку «Сохранить», данные в таблице/сетке должны быть сохранены в базе данных.
Я хочу попробовать это в ASP.NET Core MVC, используя С# с SQL Server на его бэкэнде.
Я ожидаю, что данные формы должны быть добавлены в table/grid
, а затем я смогу сохранить данные в сетке/таблице в базе данных, нажав кнопку «Сохранить».
Ребята, у вас есть предложения по этому поводу?
Я пытался создать его, но потерпел неудачу, так как я новичок в этом. Я не рассматривал JQuery и Javascript.
@AbdulBasit, можете ли вы показать нам код, который вы пробовали. Пожалуйста, проверьте эту ссылку hackernoon.com/…
@RajeshB Я искал это везде. Я использовал примеры CRUD, но это другое. В этом вопросе я упомянул о создании таблицы/сетки, в которую пользователи могут вводить данные, такие как 10 строк, и нажимая кнопку «Сохранить». Данные должны быть сохранены в базе данных.
DataTables.net — хороший вариант
Вы можете попробовать использовать JQuery, чтобы получить список добавленных данных и отправить их в контроллер.
Вот простая демонстрация:
Модель StudentInfo и StudentViewModel
public class StudentInfo
{
public int Id { get; set; }
public string Name { get; set; }
public string FName { get; set; }
public string Class { get; set; }
public string Gender { get; set; }
}
public class StudentViewModel
{
public List<StudentInfo> StudentInfos { get; set; }
}
Контроллер
[HttpPost]
public async Task<IActionResult> InsertStudents([FromBody]StudentViewModel studentVM)
{
List<StudentInfo> model = studentVM.StudentInfos;
_context.AddRange(model);
int insertedRecords=await _context.SaveChangesAsync();
return Json(insertedRecords);
}
Вид
<table id = "tblStudents" class = "table" cellpadding = "0" cellspacing = "0">
<thead>
<tr>
<th style = "width:150px">Name</th>
<th style = "width:150px">FName</th>
<th style = "width:150px">Class</th>
<th style = "width:150px">Gender</th>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td><input type = "text" id = "txtName" /></td>
<td><input type = "text" id = "txtFName" /></td>
<td><input type = "text" id = "txtClass" /></td>
<td><input type = "text" id = "txtGender" /></td>
<td><input type = "button" id = "btnAdd" value = "Add" /></td>
</tr>
</tfoot>
</table>
<br />
<input type = "button" id = "btnSave" value = "Save All" />
JavaScript
@section Scripts
{
<script type = "text/javascript">
$("body").on("click", "#btnAdd", function () {
//Reference the Name and Country TextBoxes.
var txtName = $("#txtName");
var txtFName = $("#txtFName");
var txtClass = $("#txtClass");
var txtGender = $("#txtGender");
//Get the reference of the Table's TBODY element.
var tBody = $("#tblStudents > TBODY")[0];
//Add Row.
var row = tBody.insertRow(-1);
//Add Name cell.
var cell = $(row.insertCell(-1));
cell.html(txtName.val());
//Add FName cell.
cell = $(row.insertCell(-1));
cell.html(txtFName.val());
//Add Class cell.
cell = $(row.insertCell(-1));
cell.html(txtClass.val());
//Add Gender cell.
cell = $(row.insertCell(-1));
cell.html(txtGender.val());
//Clear the TextBoxes.
txtName.val("");
txtFName.val("");
txtClass.val("");
txtGender.val("");
});
$("body").on("click", "#btnSave", function () {
//Loop through the Table rows and build a JSON array.
var students = new Array();
$("#tblStudents TBODY TR").each(function () {
var row = $(this);
var student = {};
student.Name = row.find("TD").eq(0).html();
student.FName = row.find("TD").eq(1).html();
student.Class = row.find("TD").eq(2).html();
student.Gender = row.find("TD").eq(3).html();
students.push(student);
});
//Populate invoice data
var studentVM = {};
studentVM.StudentInfos = students;
//Send the JSON array to Controller using AJAX.
$.ajax({
type: "POST",
url: "/StudentInfoes/InsertStudents",
data: JSON.stringify(studentVM),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (r) {
alert(r + " record(s) inserted.");
}
});
});
</script>
}
Я применил весь код и добавил кнопку «Сохранить», но нажатие кнопки «Сохранить» не выполняет никаких действий.
Вы использовали инструмент разработчика браузера, чтобы проверить, есть ли ошибка при нажатии кнопки «Сохранить», и проверить правильность URL-адреса в ajax? Я разместил весь код представления, пожалуйста, проверьте!
Можете ли вы отправить мне файлы проекта? Да, я проверил инструмент разработчика в Chrome, но контроллер не был вызван.
Я загрузил тот же проект на GitHub github.com/basit-chachar/MyProjects/tree/master/…, вы можете проверить его и, пожалуйста, дайте мне знать, если я что-то упустил.
Вы можете попробовать использовать другой компонент, я рекомендую сетку MVC6 http://mvc6-grid.azurewebsites.net/
в основном он использует почти такой же синтаксис, поэтому в ваш текущий код будут внесены незначительные изменения, пожалуйста, проверьте приведенный ниже пример кода.
@model IEnumerable<PersonModel>
@(Html
.Grid(Model)
.Build(columns =>
{
columns.Add(model => model.Name).Titled("Name");
columns.Add(model => model.Surname).Titled("Surname");
columns.Add(model => model.Age).Titled("Age");
columns.Add(model => model.Birthday).Titled("Birth date");
columns.Add(model => model.IsWorking).Titled("Employed");
//popup part
columns.Add(model => $"<a data-modal='' data-id=\"{model.Id}\" href='PasswordRestUser/{model.Id}' id=\"ss\" asp- action=\"PR\" asp-route-id=\"@item.Id\" class=\"btn btn-info\" '> PR <span class='glyphicon glyphicon-user'> </span> </a>").Encoded(false);
})
.Filterable()
.Sortable()
.Pageable()
)
<div id='myModal' class='modal fade in'>
<div class = "modal-dialog">
<div class = "modal-content">
<div id='myModalContent'></div>
</div>
</div>
</div>
у него также есть много других функций, которые упростят работу с .netcore.
кто реализовать rowspan здесь?
Вы пробовали это сами ..? С какими проблемами вы сталкиваетесь, чтобы сделать это.?