Вопрос или проблема
Итак, я начинающий в MVC и мне нужно много помощи, так как у меня приближается крайний срок.
У меня есть уровень доступа к данным, модель, представление и контроллер.
В контроллере у меня есть
`[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([DataSourceRequest] DataSourceRequest request, Model x)
{
if (x != null && ModelState.IsValid)
{
DataLayer.Create();
}
return Json(new[] { resident }.ToDataSourceResult(request, ModelState));
}`
Я не совсем понимаю, что здесь происходит, но с того, что я знаю, DataSourceRequest предоставляет информацию о страницах, сортировке, фильтрации и группировке данных. Функция Create принимает модель, и мы проверяем, является ли ModelState допустимым, что, я предполагаю, означает, что модель существует? Если это правда, переходим к уровню данных и создаем, что я покажу на примере ниже. Возврат я вообще не понимаю, мне также всегда было трудно понять, что такое возврат в первую очередь.
На DAL у меня есть
internal static Model Create()
{
int iRows = 0;
Guid guid = Guid.NewGuid(); (почему guid повторяется дважды?)
string qury = @"INSERT INTO Table2" +
"([Column1], [Column2], [Column3], [Column4], [Column5], [Column6], [Column7], [Column8], [Column9], [Column10], [Column11], [Column12], [Column13]) " +
" VALUES " +
"(@Column1," + ConfigurationManager.AppSettings["Column2"] + ", '', GETDATE(), 0, @Column6, 1, @Column8, @Column9, @BEG_DATE, @END_DATE, @Column2, @Column13)";
using (IDbConnection _db = OpenConnection())
{
iRows = _db.Execute(qury);
}
if (iRows > 0)
{
string qury2 = @"SELECT * FROM Table2 WHERE PrimaryID2 = @PrimaryID2";
using (IDbConnection _db = OpenConnection())
{
return _db.Query(qury2, new { PrimaryID2 = guid.ToString() }).FirstOrDefault();
}
}
else
{
return null;
}
}`
Моя модель имеет все эти колонки, которые, я полагаю, это то, откуда мы получаем данные из базы данных?
Мое представление отображает столбцы table2 и первичный ключ table1 из моделей, и столбцы table2 – это то, что я хочу вставить, когда нажимаю на кнопку, основываясь на первичном ключе, который я выбираю из выпадающего списка
<div id="container">
<div class="row">
<div class="col">
@(Html.Kendo().Button()
.Name("create")
.Content("Добавить новую строку")
.HtmlAttributes(new { type = "button", @class = "btn btn-primary" })
.Events(ev => ev.Click("create")))
</div>
<div class="col">
@Html.DropDownListFor(a => a.model.primarykey1, (IEnumerable<SelectListItem>)ViewBag.dropdownlist, "-- Выберите id1--", new { @class = "form-control", @id = "id1" })
</div>
</div>`
— Я на самом деле не знаю, что происходит ниже
function create(items) {
var grid = $('#grid').data('kendoGrid');
grid.select().each(function (index, row) {
var selectedItem = grid.dataItem(row);
items.push(selectedItem.primaryid2);
});
var selectedResident = $("#primaryid1").val();
$.ajax({
url: "/user/Create",
type: "POST",
data: { grid: items },
traditional: true, // добавьте это
success: function (result) {
$('#grid').data('kendoGrid').dataSource.read();
$('#grid').data('kendoGrid').refresh();
},
error:
function (response) {
alert("Ошибка: " + response);
}
});
}``
Извините за изменение формулировки, но мне немного страшно публиковать код компании, также если у вас есть какие-либо учебные пособия или что-то еще, что было действительно полезно для вас в понимании кодирования, пожалуйста, поделитесь чем-нибудь.
Я пытался получить Primaryid1 из выпадающего списка и использовать этот идентификатор для создания и вставки строки в table2, которая будет отображаться в таблице table2 на сайте.
Ответ или решение
В вашем случае задача заключается в создании новой строки в таблице Table2
на основе идентификатора, выбранного в выпадающем списке DropDownList
, и по нажатию кнопки, используя ASP.NET MVC с Kendo UI. Давайте разберем ваши файлы и шаги, которые вам нужно выполнить.
1. Модель
Убедитесь, что ваша модель включает все необходимые свойства, которые соответствуют столбцам таблицы Table2
. Например:
public class Model
{
public Guid PrimaryID2 { get; set; }
public string Column1 { get; set; }
public string Column2 { get; set; }
// Добавьте остальные столбцы
}
2. Контроллер
В вашем контроллере метод Create
должен принимать данные из AJAX-запроса и использовать их для вставки новой записи в Table2
. Убедитесь, что вы правильно передаете данные из представления.
Пример исправленного метода Create
в контроллере:
[HttpPost]
public ActionResult Create([DataSourceRequest] DataSourceRequest request, Model model)
{
if (model != null && ModelState.IsValid)
{
var createdModel = DataLayer.Create(model);
if (createdModel != null)
{
return Json(new[] { createdModel }.ToDataSourceResult(request, ModelState));
}
}
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
}
Примечание: Убедитесь, что метод
Create
вDataLayer
принимает объектmodel
и использует его для вставки данных.
3. Data Access Layer (DAL)
Ваш метод создания в DataLayer
должен принимать объект model
:
internal static Model Create(Model model)
{
int iRows = 0;
Guid primaryId = Guid.NewGuid(); // Используется для ID объекта
string query = @"INSERT INTO Table2 ([Column1], [Column2], ...) VALUES (@Column1, @Column2, ...)";
using (IDbConnection _db = OpenConnection())
{
iRows = _db.Execute(query, model);
}
// Будьте уверены, что вы используете правильный ID для нового объекта
if (iRows > 0)
{
// Возвращаем новую запись
string query2 = @"SELECT * FROM Table2 WHERE PrimaryID2 = @PrimaryID2";
using (IDbConnection _db = OpenConnection())
{
return _db.Query<Model>(query2, new { PrimaryID2 = primaryId }).FirstOrDefault();
}
}
return null;
}
4. Представление (View)
Обновите ваше представление, чтобы убедиться, что DropDownList
правильно связывается с вашим полем модели. Также убедитесь, что у вас есть кнопка, запускающая функцию JavaScript для отправки AJAX-запроса.
@model YourNamespace.Model
<div id="container">
<div class="row">
<div class="col">
@(Html.Kendo().Button()
.Name("create")
.Content("Добавить новую строку")
.HtmlAttributes(new { type = "button", @class = "btn btn-primary" })
.Events(ev => ev.Click("create")))
</div>
<div class="col">
@Html.DropDownListFor(a => a.PrimaryID2, (IEnumerable<SelectListItem>)ViewBag.dropdownlist, "-- Выберите ID --", new { @class = "form-control", @id = "id1" })
</div>
</div>
</div>
5. JavaScript
Ваш JavaScript-код для обработки клика по кнопке должен извлекать выбранный элемент из выпадающего списка и передавать его на сервер.
function create() {
var selectedId = $("#id1").val();
$.ajax({
url: "/user/Create",
type: "POST",
data: { PrimaryID2: selectedId }, // Отправляем выбранный ID
success: function (result) {
$('#grid').data('kendoGrid').dataSource.read();
$('#grid').data('kendoGrid').refresh();
},
error: function (response) {
alert("Ошибка: " + response);
}
});
}
6. Объяснение
- Контроллер: Метод контроллера принимает данные из представления, проверяет их валидность и вызывает метод DAL для создания новой записи.
- DAL: Метод вставляет данные в базу и возвращает добавленный объект.
- Представление: Выпадающий список позволяет пользователю выбрать идентификатор, который будет отправлен на сервер при нажатии кнопки.
- JavaScript: Код отправляет AJAX-запрос с выбранным идентификатором на сервер.
Заключение
Теперь у вас есть полное представление о том, как реализовать вашу задачу. Вы уверены, что правильно устанавливаете и используете все компоненты MVC (модель, представление, контроллер)? Убедитесь, что все зависимости настроены, и проверьте, что код соответствует вашему проекту. Если вам нужны дополнительные материалы для изучения, вы можете обратиться к официальной документации ASP.NET MVC и Kendo UI для более детального понимания.