Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Запомнить выбранную строку после обновления View / 13 сообщений из 13, страница 1 из 1
30.12.2013, 15:49
    #38515968
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
Всех с наступающим!

есть view, с master-detail данными что-то наподобие этого .
По ссылке Select master-таблицы показывается detail-таблица, НО master-таблица после обновления view отображается с первой строки, что ожидаемо. А хочется, чтобы активной была именно выбранная запись master-таблицы. Поделитесь ссылками, куда копать.
...
Рейтинг: 0 / 0
30.12.2013, 18:07
    #38516112
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
Nicky_N,

сохраните "курсор" в QueryString и восстанавливайте его. тогда обновление будет не страшно.
...
Рейтинг: 0 / 0
30.12.2013, 22:37
    #38516267
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
hVosttсохраните "курсор" в QueryString и восстанавливайте его. тогда обновление будет не страшно.
помогите ссылкой или примером, реально первое приложение на ASP.NET MVC пишу, многого (м.б. даже элементарного на Ваш взгляд) не знаю.
...
Рейтинг: 0 / 0
31.12.2013, 07:46
    #38516354
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
Nicky_N,

приведите пример того, что сделали, и что не получается. можете код выложить или проект архивом.
...
Рейтинг: 0 / 0
31.12.2013, 10:35
    #38516396
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
hVosttприведите пример того, что сделали, и что не получается. можете код выложить или проект архивом.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Модель
    public class Substation
    {
        public Int16 SybRnk { get; set; }

        [Display(Name = "Номер п/ст")]
        public Int32 NOb { get; set; }

        [Display(Name = "Название")]
        public string Name { get; set; }

        public IEnumerable<Feeder> Feeders { get; set; }
    }

    public class Feeder
    {
        public Int16 SybRnk { get; set; }
        public Int32 NOb { get; set; }
        public Int16 NFid { get; set; }
        public string Name { get; set; }
        public VoltageClass VoltageClass { get; set; }
    }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Репозитории:
    public interface ISubstationRepository
    {
        IQueryable<Substation> GetAllSubstations();
    }

    public interface IFeederRepository
    {
        IQueryable<Feeder> GetFeedersBySubstation(Int16 sybRnk, Int32 nOb);
    }



Код: 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.
Контроллер
        private ISubstationRepository _substationRepository;
        private IFeederRepository _feederRepository;

        public SubstationController(ISubstationRepository substationRepository, IFeederRepository feederRepository)
        {
            this._substationRepository = substationRepository;
            this._feederRepository = feederRepository;
        }

        public ViewResult Index(short? sybRnk, int? nOb)
        {
            if (nOb != null)
            {
                // Если пользователь нажал ссылку присоединения
                ViewBag.nOb = nOb;

                var substations = _substationRepository.GetAllSubstations();
                
                // Выбираем текущую подстанцию 
                Substation substation = substations.Where(s => s.SybRnk == sybRnk && s.NOb == nOb).First();
                // Загружаем для текущей постанции список присоединений
                // Эмуляция ленивой загрузки
                substation.Feeders = _feederRepository.GetFeedersBySubstation((short)sybRnk, (int)nOb);

                return View(substations);
            }

            return View(_substationRepository.GetAllSubstations());
        }



Код: 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.
55.
56.
57.
Представление
@{
    ViewBag.Title = "Постанции";
    int counterSubst = 1;
}

<h2>Список подстанций</h2>
<table>
    <tr>
        <th>№ п/п</th>
        <th>@Html.DisplayNameFor(model => model.Single().NOb)</th>
        <th>@Html.DisplayNameFor(model => model.Single().Name)</th>
        <th></th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@counterSubst</td>
            <td>@Html.DisplayFor(modelItem => item.NOb)</td>
            <td>@Html.DisplayFor(modelItem => item.Name)</td>
            <td>@Html.ActionLink("Присоединения", "Index", new {sybRnk = item.SybRnk, nOb = item.NOb })</td>
        </tr>
        counterSubst++;
    }
</table>

@if (ViewBag.nOb != null)
{
    // Выбираем присоединения для текущей подстанции
    var feeders = Model.Where(m => m.NOb == ViewBag.nOb).FirstOrDefault().Feeders;
    if (feeders != null && feeders.Count() > 0)
    {
    <table>
        <tr>
            <th>@Html.DisplayNameFor(model => model.Single().Feeders.Single().SybRnk)</th>
            <th>@Html.DisplayNameFor(model => model.Single().Feeders.Single().NOb)</th>
            <th>@Html.DisplayNameFor(model => model.Single().Feeders.Single().NFid)</th>
            <th>@Html.DisplayNameFor(model => model.Single().Feeders.Single().Name)</th>
        </tr>

        @foreach (var item in feeders)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.SybRnk)</td>
                <td>@Html.DisplayFor(modelItem => item.NOb)</td>
                <td>@Html.DisplayFor(modelItem => item.NFid)</td>
                <td>@Html.DisplayFor(modelItem => item.Name)</td>
            </tr>
        }

    </table>
    }
    else
    {
        <p>Для выбранной подстанции присоединения отсутствуют</p>
    }
}


Список подстанций большой, каждый раз, когда пользователь щелкает по ссылке присоединения, список подстанций позиционируется в начало, а хочется, чтобы он оставался на текущей записи, для которой выводятся детали.
Позже, я конечно же сделаю пэйджинг, по примеру , но он не поможет, по крайней мере приведенная в примере реализация: после редактирования последней записи, возвращает на первую страницу.
...
Рейтинг: 0 / 0
31.12.2013, 10:50
    #38516402
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
IQueryable репозитории - это зло. Код выше просто ужасен, во вью какие-то манипуляции с базой, дублирующие запросы, просто мрак...
...
Рейтинг: 0 / 0
31.12.2013, 10:58
    #38516405
Nicky_N
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
МСУ,

Первый блин комом)
а во вью манипуляций с базой нет и быть не может, там идет выбор из уже сформированной модели, а работа с БД - только в контроллере.
принимаются констуктивные предложения, как сделать код прекрасным)
...
Рейтинг: 0 / 0
31.12.2013, 12:44
    #38516475
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
Nicky_Nа во вью манипуляций с базой нет и быть не может, там идет выбор из уже сформированной модели
Всё-равно очень плохо. Отдавай вьюхе готовую модель представления, никаких вычислений.

Nicky_Nа работа с БД - только в контроллере.
Работай с БД в репозитории, забудь про IQueryable.

Nicky_Nпринимаются констуктивные предложения, как сделать код прекрасным)
http://codearticles.ru/articles/2357
http://codearticles.ru/articles/2407
...
Рейтинг: 0 / 0
31.12.2013, 16:08
    #38516593
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
МСУIQueryable репозитории - это зло.

IQueryable это интерфейс, и злом быть не может априори.
такие заявления -- бестолковый фанатичный необоснованный выхлоп.
не стоит так говорить.

IQueryable для репозиториев -- то что доктор прописал!
...
Рейтинг: 0 / 0
31.12.2013, 16:10
    #38516594
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
МСУ,

и вообще, с наступающим! ))
токо не говори, что НГ тоже зло
поменьше занудства и всего хорошего!
чтоб не только компилелось, но и работало!
...
Рейтинг: 0 / 0
31.12.2013, 16:20
    #38516601
st_st
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
НГ - зло С наступающим! У нас уже через 40 минут.
...
Рейтинг: 0 / 0
31.12.2013, 16:20
    #38516602
Парамон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
Я вот тоже в сомнениях. )
В принципе IQueryable помогает от этого:
авторС ростом приложения нам требуется всё больше разных запросов. Объект Repository может вырасти до десятков публичных функций. Нечёткая ответственность делает такой Repository нарушителем SRP.
...
Рейтинг: 0 / 0
31.12.2013, 17:21
    #38516627
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запомнить выбранную строку после обновления View
hVosttМСУIQueryable репозитории - это зло.
IQueryable это интерфейс, и злом быть не может априори.
IQueryable репозитории != IQueryable

hVosttтакие заявления -- бестолковый фанатичный необоснованный выхлоп.
не стоит так говорить.
Такие заявления - это практика.

hVosttIQueryable для репозиториев -- то что доктор прописал!
http://codearticles.ru/articles/2357

hVosttМСУ, и вообще, с наступающим! ))
Взаимно! :)

hVosttтоко не говори, что НГ тоже зло
Всё относительно и для кого как
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Запомнить выбранную строку после обновления View / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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