Как вставить строку в таблицу2 на основе выбранного ID из таблицы1 в выпадающем списке Kendo и добавить строку при нажатии кнопки Kendo в MVC

Вопрос или проблема

Итак, я начинающий в 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. Объяснение

  1. Контроллер: Метод контроллера принимает данные из представления, проверяет их валидность и вызывает метод DAL для создания новой записи.
  2. DAL: Метод вставляет данные в базу и возвращает добавленный объект.
  3. Представление: Выпадающий список позволяет пользователю выбрать идентификатор, который будет отправлен на сервер при нажатии кнопки.
  4. JavaScript: Код отправляет AJAX-запрос с выбранным идентификатором на сервер.

Заключение

Теперь у вас есть полное представление о том, как реализовать вашу задачу. Вы уверены, что правильно устанавливаете и используете все компоненты MVC (модель, представление, контроллер)? Убедитесь, что все зависимости настроены, и проверьте, что код соответствует вашему проекту. Если вам нужны дополнительные материалы для изучения, вы можете обратиться к официальной документации ASP.NET MVC и Kendo UI для более детального понимания.

Оцените материал
Добавить комментарий

Капча загружается...