Как получить идентификатор нажатой кнопки, а затем использовать ее в качестве внешнего ключа для чего-то другого? (ASP. NET MVC) - PullRequest
1 голос
/ 23 апреля 2020

В настоящее время у меня есть простая программа, которая получает пользовательский ввод текста. Введенный текст затем используется в качестве заголовка для bootstrap складных, эти заголовки упоминаются как «Категории» в контексте моей программы. Пользователь может щелкнуть любую из этих категорий и назначить им подкатегории (элементы). Однако мне нужно иметь возможность записать идентификатор категории, по которой щелкнули (категория, к которой пользователь хочет добавить подкатегорию ie (s)), а затем записать этот идентификатор в текстовом файле как иностранный добавлен ключ подкатегории ie (s).

Будет работать примерно так:

1.) Пользователь нажимает категорию «Домашняя работа» (имеет идентификатор (первичный ключ) из 0)

2.) Пользователь добавляет несколько подкатегорий, а именно:

  • 'Math Homework' (с идентификатором (первичным ключом), равным 0, и Foreign ключ 0)

  • «Биология» (имеет идентификатор (первичный ключ) 1 и внешний ключ 0)

  • 'французский '(Имеет идентификатор (первичный ключ) 2 и внешний ключ 0)

3.) Текстовый файл, в котором записаны подкатегории, будет иметь следующий формат:

Math Домашнее задание, 0,0

Биология, 1,0

Французский, 2,0

Примечание. в настоящее время записывает первые две части вышеприведенного примера, например: it current tly records: Math Homework, 0 ... Однако я изо всех сил пытаюсь связать внешний ключ.

Ниже приведен вид, который я использую для отображения складных объектов:

@Model.CategoryList.result
        @if (Model.CategoryList.result == "")
        {
            int count = 0;

            foreach (String dataLine in Model.CategoryList.userData)
            {

                string countString = count.ToString();
                string target = "dataLine" + countString;
                string trigger = "#" + target;

                <p>
                    <a data-toggle="collapse" href="@trigger" role="button" aria-expanded="false" aria-controls="collapseExample">
                        @dataLine.Split(Model.CategoryList.delimiterChar)[0]
                    </a>

                    <button class="btn" onclick="location.href='@Url.Action("Items", "Items")'" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"><i class="fas fa-plus secondaryPlusIcon" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"></i></button>
                    <button class="btn" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"><i class="far fa-edit secondaryEditIcon" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"></i></button>
                    <button class="btn" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"><i class="far fa-trash-alt secondaryDeleteIcon" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]"></i></button>
                </p>

                foreach (String dataLineItem in Model.ItemList.userDataItems)
                {
                    <div class="collapse" id="@target">
                        <div class="card card-body w-25 p-3 collapsible" id="@dataLine.Split(Model.CategoryList.delimiterChar)[1]">
                            @dataLineItem.Split(Model.CategoryList.delimiterChar)[0]
                        </div>
                    </div>
                }

                count++;

            }

        }

В качестве дополнительного Примечание; onclick = "location.href = '@ Url.Action (" Items "," Items ")'" отвечает за перенаправление пользователя в новое представление, где он / она может вводить нужные подкатегории.

And id = "@ dataLine.Split (Model.CategoryList.delimiterChar) [1]" назначает уникальный накопительный целочисленный идентификатор, начиная с 0, каждой новой добавляемой категории. Это будет первичный ключ для заголовков категорий.

Наконец, вот контроллер, который я использовал для инициализации значений, видимых в представлении:

public ActionResult Index()
        {
            CategoryItemViewModel CIVM = new CategoryItemViewModel();
            CIVM.ItemList = GetItemModel();
            CIVM.CategoryList = GetCategoryModel();
            return View(CIVM);             
        }

        public Category GetCategoryModel()
        {
            var dataFile = Server.MapPath("~/App_Data/Category.txt");

            Category cModel = new Category()
            {
                result = "",
                delimiterChar = new[] { ',' },
                userData = System.IO.File.ReadAllLines(dataFile) //Category Text File
            };

            return cModel;
        }

        public Item GetItemModel()
        {
            var dataFileItems = Server.MapPath("~/App_Data/Item.txt");

            Item iModel = new Item()
            {
                userDataItems = System.IO.File.ReadAllLines(dataFileItems) //Items Text File
            };

            return iModel;
        }

Надеюсь, я предоставил достаточную информацию с указанным выше кодом и контекстом. Я полагаю, что можно было бы использовать jQuery / AJAX / Json / JS et c для выполнения такой функции, однако я совершенно растерялся, с чего начать.

Любая помощь очень ценится. Большое вам спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...