powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC динамические списки
15 сообщений из 15, страница 1 из 1
MVC динамические списки
    #39553604
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток господа. Я продолжаю по Вашему наставлению изучать mvc на примере создания web-приложения учета техники. Мне бы хотелось реализовать следующую идею:

Имеется таблица оборудования с полями:
1) eq_id int (PK)
2) type_id int (FK)
3) model_id int (FK)
4) factory_number varchar - Заводской номер
5) price numeric - цена
6) sl_id int (FK)

type_id и model_id связаны с соответствующими таблицами-справочниками типов (sl_TypeOfEquipment) и моделей (sl_ModelOfEquipment) оборудования. Их поля одинаковы - это id и name. sl_id - ключ к таблице пломб dt_StampList - в ней аналогичное поле является PK. Там меня интересует поле stamp_number

Смысл того что я хочу следующий - есть у меня таблица для создания сборки оборудования dt_EquipmentAssembly. В ней есть FK на поле eq_id из т оборудования. Для заполнения данной таблицы мне нужно 2 DropDownList, причем при выборе в первом типа оборудования, во втором должны отобразиться модели только выбранного типа. А когда пользователь выберет модель, вьюха должна выкатить таблицу на основе выбранных значений с полями - eq_id(невидимое), Заводской номер, Цена, Номер пломбы (он может быть а может и нет. По ключу sl_id), а также поле вида RadioButton. Ну и ниже отдельно поле для ввода количества.

В итоге по нажатию кнопки "Добавить": В контроллер метода POST мне надо передать выбранный по RadioButton код оборудования (eq_id) и количество. Там я уже через ХП знаю что мне с этим делать.
Фух вроде как то так.

Из вопросов:
1) Данный метод реализации интерфейса по выбору оборудования в принципе правилен? Или такая выдумка полная фигня - есть вариант лучше?
2) Если реализация годна, то как это можно сделать?

ЗЫ: Почитав про динамические списки я примерно понял так - надо в папке моделей создать новый класс с описаниями полей. Потом в контроллере описать действия, плюс во вьюхе еще дописывается кусок скрипта.

ЗЫЫ: Писалось еще, что можно свой хелпер написать, но это я еще не осилил.
...
Рейтинг: 0 / 0
MVC динамические списки
    #39553773
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

Теперь надо сделать и выложить на порицание. Иного пути нет.
...
Рейтинг: 0 / 0
MVC динамические списки
    #39553971
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ок, буду сейчас хотя бы 2 списка выводить. А Вам кстати отдельное спасибо за идею по ViewBag с Дропом. Вычитал в другой теме. Уж не знаю чем она вызвала негодование, ведь я заметил что если так делать с несвязанными таблицами, дроп падает в исключение
...
Рейтинг: 0 / 0
MVC динамические списки
    #39553979
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получается в примере один список вложен в другой. А вот если как у меня - в таблице оборудования присутствуют 2 ид. И к ним справочники. Они по большому счету независимы. И сходятся только в таблице оборудования.
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554018
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Што то пока вообще не могу придумать с чего начать ((((
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554036
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

а цель какая? Web разработку освоить?
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554045
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, да. Я по ходу создаю веб-приложение учета техники. И в текущей задаче мне хотелось создать какую-нибудь интерактивную форму выбора на основе той БД, которую я создал.
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554046
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто в книгах в основном показывают то что один список вложен в другой. А я по факту имею таблицу с 2-мя ИД. Один из них привязан к типам, второй к моделям. А для включения в сборку я вообще заполняю другую таблицу в которой есть FK на таблицу оборудования
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554215
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таакс дело сдвинулось с мертвой точки. Я пока решил отказаться от динамических списков. Пока сделал следующее...

Модель:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class EqAssem
{
{
	public class AssemList
	{
		public int a_id {get; set;} // код сборки - передается при создании вьюхи
		public int eq_id {get; set;} // код оборудования
		public int type_id {get; set;} // код типа модели из выпадающего списка
		public int model_id {get; set;} // код модели из выпадающего списка
		public int cnt_id {get; set;} // количество

		public Db<Equip> Equips {get; set;} // Предполагаемый вывод списка оборудования
	}

	public class Equip // Этот набор полей (неполный) взят с таблицы dt_Equipment
	{
		public int eq_id {get; set;}
		public Nullable<int> type_id {get; set;}
		public Nullable<int> model_id {get; set;}
		public string factory_number {get; set;}
		public Nullable<decimal> price {get; set;}
	}
}
}



Процедура в контроллере
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public ActionResult EquipmentAssemblyCreateNewVar(int id)
{
	AccountingTechnologyEntities db = new AccountingTechnologyEntities(); // БД на MS SQL Server
	EqAssemList.AssemList dl = new EqAssemList.AssemList();

	SelectList st = new SelectList(db.sl_TypeOfEquipment, "id", "name");
	SelectList sm = new SelectList(db.sl_ModelOfEquipment, "id", "name");

	dl.a_id = id;
	ViewBag.type_id = st;
	ViewBag.model_id = sm;

	return View(dl);
}



Созданная на основе этого вьюха показывает списки, код сборки (a_id).
А теперь я хотел бы через кнопочку на форме динамически подгрузить таблицу на основе выбора ид-типа и модели... Пока не знаю как...
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554216
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда я пока вьюхи aspx-ные делаю. Потом попробую Razor
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554329
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оке, потихоньку начинает получаться. Сделал ajax-запрос. Но он выводит в другой форме. Я понял что нужно возвращать PartialView с таким же именем что и вьюха откуда пошел запрос. Вот только незадача. Вьюха у меня с моделью (см выше). А как мне заполнить dbSet из таблицы БД?
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554345
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или как можно затолкать в свою модель существующую таблицу БД
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554391
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чет затупил... Чувствую что усложняю... Или все же. Можно ли в самописной модели использовать таблицу из БД?
...
Рейтинг: 0 / 0
MVC динамические списки
    #39554833
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем не могу совладать с ajax-запросом. Открывается результат в отдельной форме. За модель я взял таблицу dt_Equipment из БД

Контроллер

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
// НОВЫЙ ВАРИК ДОБАВЛЕНИЯ*****************************
        
        public ActionResult EquipmentAssemblyCreateNewVar(int id)
        {
            AccountingTechnologyEntities db = new AccountingTechnologyEntities();
            
            SelectList st = new SelectList(db.sl_TypeOfEquipment, "id", "name");
            SelectList sm = new SelectList(db.sl_ModelOfEquipment, "id", "name");

            var data = db.dt_Equipment.Select(e => e);

            ViewBag.a_id = id;
            ViewBag.type_id = st;
            ViewBag.model_id = sm; 

            return View(data);
        }

        public ActionResult Search(int type_id, int model_id)
        {
            AccountingTechnologyEntities db = new AccountingTechnologyEntities();
         
            var data = db.dt_Equipment.Where(e => e.type_id == type_id && e.model_id == model_id).Select(e => e);

            SelectList st = new SelectList(db.sl_TypeOfEquipment, "id", "name");
            SelectList sm = new SelectList(db.sl_ModelOfEquipment, "id", "name");

            ViewBag.type_id = st;
            ViewBag.model_id = sm;

            return PartialView("Search", data);
        }

        //
        // POST: /dtEquipmentAssembly/Create

        [HttpPost]
        public ActionResult EquipmentAssemblyCreateNewVar(int id, dt_Equipment assem, string a_id, string cnt)
        {
            try
            {
                // TODO: Add insert logic here
                AccountingTechnologyEntities db = new AccountingTechnologyEntities();

                db.usp_IED_EquipmentAssembly(1, 0, Convert.ToInt32(a_id), assem.eq_id, Convert.ToInt32(cnt));

                return RedirectToAction("Details", new { id = id });
            }
            catch
            {
                return View();
            }
        }
        //*********************************




Вью основная

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplicationProb.Models.dt_Equipment>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Добавление
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Добавление оборудования к сборке (Новая версия***)</h2>

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

<% using (Ajax.BeginForm("Search", "dtAssembly", new AjaxOptions
    {
        HttpMethod = "GET",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "EquipmentTable"
    }))
{%>
        <div class="editor-label">
            <%: Html.Label("Тип оборудования") %>
        </div>
        <div class="editor-field">
            <%: Html.DropDownList("type_id") %>
        </div>&nbsp;

        <div class="editor-label">
            <%: Html.Label("Модель оборудования") %>
        </div>
        <div class="editor-field">
            <%: Html.DropDownList("model_id") %>
        </div>&nbsp;
        
        <input type="submit" value="Поиск оборудования"/>       
<%}%>

<table id="EquipmentTable"></table>

<% using (Html.BeginForm()) { %>
    <fieldset>
        
        <legend>***Оборудование***</legend>

        <div class="editor-label">
            <%: Html.Label("Код сборки") %>
        </div>
        <div class="editor-field">
            <%: Html.Hidden("a_id", ViewBag.a_id as string) %>
        </div>&nbsp;

        <div class="editor-label">
            <%: Html.Label("Количество") %>
        </div>
        <div class="editor-field">
            <%: Html.TextBox("a_id", ViewBag.a_id as string) %>
        </div>&nbsp;

        <p>
            <input type="submit" value="Создать" />
        </p>
    </fieldset>
<% } %>

<div>
    <%: Html.ActionLink("К описанию сборки", "Details", new { id = ViewBag.a_id })%>
</div>

</asp:Content>




Частичная вью

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MvcApplicationProb.Models.dt_Equipment>>" %>
<table id="EquipmentTable">
    <tr>
        <th>
            Заводской номер
        </th>
        <th>
            Цена
        </th>
        <th></th>
    </tr>

<% foreach (var item in Model)
   { %>
    <tr>
        <td>
            <%: Html.DisplayFor(modelItem => item.factory_number) %>
        </td>
        <td>
            <%: Html.DisplayFor(modelItem => item.price) %>
        </td>
    </tr>
<% } %>

</table>


...
Рейтинг: 0 / 0
MVC динамические списки
    #39554982
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем пока отбросил всю динамику. Не готов я еще видимо это понять. Сделал по простому
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC динамические списки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]