Обява

Свий
Няма добавени обяви.

Разни въпроси към WEB-аджиите...

Свий
X
 
  • Филтър
  • Час
  • Покажи
Изчисти всичко
нови мнения

  • От: Разни въпроси към WEB-аджиите...

    Мда. За viewbag-a не се бях сетил.

    Таб ИД обаче не трябва да е. По-късно ще обясня цалата концепция, дето ми е в акъла в момента, че сега пиша от телефона и ми е малко тегаво.
    Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

    Коментар


    • От: Разни въпроси към WEB-аджиите...

      Първоначално публикуван от sparkybg Преглед на мнение
      Мда. За viewbag-a не се бях сетил.

      Таб ИД обаче не трябва да е. По-късно ще обясня цалата концепция, дето ми е в акъла в момента, че сега пиша от телефона и ми е малко тегаво.
      Значи. LogIn-а се състои първо в логване с юзернейм и парола, и след това избиране на фирмата, върху чиито данни ще работи юзера. След като си е избрал фирмата, вече са му ясни и правата. Всичкото това стои в един worksession клас, който пък е част от worksessions колекция. В същия WorkSession клас стои и конекцията към базата данни и прочие глобални за сесията нещица. При всяко логване се отваря нов WorkSession и се добавя в колекцията, а ID-то на тоя worksession клас се ползва от контролерите за практически всякаква работа - от писане и четене в базата, до справки и прочие истории. Ако юзера вече се е логнал, отварянето на нов таб и влизането втори път в уеб страницата се състои само в избиране на на фирма, в чиито данни ще твори. Фирмата може да е и същата като в първоначалния TAB. Тоест, всеки контролер, освен че трябва да идентифицира юзера, трябва да знае и worksession-а му, за да знае базата с която се работи и правата на юзера в тая база.

      Реално, юзера може да е отворил няколко таба, без ограничение в коя/и фирма/и ще работи във всеки таб. Тоест, един и същ потребител например може да работи от 2 таба в една фирма, и от други 3 в друга фирма.

      Това с удобните линкове не ме интересува. Дори обратното - искам отгоре през цялото време да стои например "https://bla-bla.sparkysoft.com/", и така през цялото време докато се работи в програмата.

      Може би замислите и идеите ми да ви се виждат странни от вашата гледна точка, ама те тия неща се научават с времето и натрупания опит, та ако има нещо странно и безсмислено - няма да се разсърдя на никой ако ми подскаже кое е лошо и защо. Накратко - искам да имам минимален брой рестрикции/разлики, сравнении с работа с обикновена локална vb6 програма - нищо не ти пречи да пуснеш колкото си искаш пъти програмата и всичките да са едновременно отворени, докато работиш.
      Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

      Коментар


      • От: Разни въпроси към WEB-аджиите...

        Ето една доста абстрактна идея от мен:

        Понеже разликата между Web и Десктоп приложение е, че първото е Stateless, а второто - Statefull, то за да можеш да направиш Web да прилича на Desktop, трябва да си направиш някаква абстракция, която да ти конструира State-а, или иначе казано Context. Това може да стане, като си направиш например един базов контролер(което ти май вече си направил), да кажем:

        public class SessionController : Controller{

        public WorkSession currentSession {
        get;
        }
        public override void OnAuthorization(AuthorizationContext filterContext){
        base.OnAuthorization(filterContext);

        // приемаме, че в Global.asax >> OnAuthorizationRequest() сме логнали усера чрез cookie, и евентуално сме му заредили ролите
        var session = new WorkSession();
        session.Instantiate(filterContext.RequestData.RouteData.Values["worksessionid"]); // worksessionid се дефинира в global.asax >> routes, виж по-долу
        this.currentSession = session;
        return;
        }
        }
        като WorkSession е клас, който съдържа всички параметри, които ще ти трябват впоследствие - connection strings, бла-бла. По този начин можеш да го вкараш в Context.Items, и ще имаш достъп до него от всяко View/Template. В примера тук просто го сетваме като пропърти на базовия контролер, така че ще имаш достп до него във всяко View. Това е така да се каже - State-а, и оттам нататък във View-тата само си дефинираш бизнес логиката, която ти трябва, а тази бизнес логика ще разчита на този WorkSession клас за да си намира параметрите. Примерно може да дефинираш този клас като нещо такова:

        public class WorkSession{
        public string ConnectionString { get; set; }
        public string WorkSessionId { get; set; }

        public void Instantiate (string workSessionId){
        // initialization of class variables
        }
        public OleDbConnection GetDbConnection(){
        // some magic here...
        return session_specific_conn;
        }

        public bool HasPermission(string permission){
        // some checks...
        return has_permission;
        }
        }
        И оттам нататък, кода в едно View би изглеждал нещо такова:

        public ActionResult CreateSomething(string some_param){

        MyCustomObjectManager manager = new MyCustomObjectManager(session.GetDbConnection());
        MyObject some_object_to_create = new MyObject() { name="blabla", value="tu-tuu"};
        manager.UpdateObject(some_object);

        return View();
        }
        Надявам се да е станала ясна идеята - да се вкара целия код по създаването на WorkSession контекста на едно място, където да се инициализират context променливите, да се проверяват права и т.н. И оттам нататък в самите View-та да се ползват тези неща, без да се налага да се инициализират навсякъде поотделно.

        Основния проблем, който аз съзирам тук, е че не искаш да държиш WorkSessionId в URL. Това като цяло е грешен подход в твоя случай, защото ти искаш едно и също URL да може да работи на сървъра в различен контекст. Единствения възможен начин е абсолютно всичко да ти работи по POST, за да можеш да си получаваш WorkSessionId всеки път. Това аз не бих го препоръчал в никакъв случай. Най-простото обяснение е, че някой клика нещо, то прави някаква промяна, само че нещо не му се зарежда страницата. И тогава имаме проблем - user-a дава Refresh на страницата, и тя ги пита - да ресъбмитна ли POST датата отново ? И какво правим ако току-що сме имали Insert заявка? То излиза, че refresh == "insert нов запис"... Не е май това, което искаме?

        То като цяло концепцията на MVC се базира частично на CRUD:
        GET == Index, Show, Details
        POST = INSERT/UPDATE/DELETE

        Пълния CRUD е с PUT и DELETE, но там е по-особено, и няма да ги обсъждаме засега.

        Така че не е невъзможно да караш всичко на POST, но така губиш много, а и не е приятно за User-а.

        Но за да постигнеш това с GET/POST, трябва при GET да имаш параметър в URL, който да ти представлява WorkSessionID. Давам ти един елементарен пример:

        Global.asax:

        routes.MapRoute("update_something",
        "something/update/{worksessionid}",
        new {controller = "SomethingController", action = "Update", worksesisonid = ""}

        );
        Това ти дефинира, че URL: mysite.com/something/update/1234567890 ще се обработи от:

        class SomethingController : SessionController{

        [AcceptVerbs.Get]
        public ActionResult Update(string worksessionid){

        ......
        return View();
        }
        [AcceptVerbs.Post]
        public ActionResult Update(string worksessionid, FormCollection data){

        ......
        return RedirectToAction("Index");
        }
        }
        Това е един елементарен пример, с който си дефинираш Route за URL в което ще правиш Update на обекта Something, като първия метод ще се извика при GET, т.е. когато напраимер заредим страницата с Update формата, а втория метод ще се викне при POST, т.е. когато сме натиснали даден бутон там за запис на данните. Като е добре POST да прави редирект(302) на View с GET, така че ако User-a натисне Refresh, да не му иска да прави пак POST.

        Обмисли го добре дали наистина искаш всичко да е по POST без да подаваш нищо в URL. Така ще изгубиш наистина много от функционалността на MVC, и ще се налага да правиш нещата по трудния начин. Използвайки модела с GET/POST - ще имаш много по-голяма гъвкавост, ще можеш да си дефинираш по-добре View-тата, да си разделиш кода на Create/Update/Delete/View, вместо в 1 View да бухаш целия код, и да се опитваш да разбереш каква операция правиш при всяка заявка. Пак казвам - идеята на MVC е точно да можеш да си дефинираш по-разбираемо страниците на сайта през URL routes, и да можеш след това да ги обработваш по-лесно.
        Ако не използваш това - то тогава ти не ползваш MVC модела. А ползваш MVC framework-а за да си построиш съвсем обикновен ASP.NET web site. Помисли над това...
        Вярата в конспирации е опростяване, което ни помага да обясняваме всичко.

        Коментар


        • От: Разни въпроси към WEB-аджиите...

          Първоначално публикуван от Tihomir(imageo) Преглед на мнение
          ....
          Благодаря. Помагаш адски много!

          Всъщност, като питах по-горе може ли само с POST, точно от такива неща се притеснявах, но не знаех как да си "дефинирам" притесненията.

          Само за разделението (Create/Update/Delete/View) - проекта ще има към 150-200 View-та (VB6 програмата има над 350 форми). Ако ги и разделя, ще стане съвсем мазало, та май предпочитам до колкото може кода да е накуп.
          Последно редактирано от sparkybg; 28-07-12, 12:22.
          Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

          Коментар


          • От: Разни въпроси към WEB-аджиите...

            Предполагам, под форма имаш предвид MvcForm, а не View. Няма проблем в 1 View да обработваш няколко форми. Но се опитай да си ги разделиш функционално на View-та. Тук по-скоро би трябвало 1 View == 1 Таб във VB програмата, според зависи как точно са ти организирани нещата. То не пречи да си share-ваш форма между View-та, но тук вече почваме да задълбаваме в конкретната имплементация. То може да си дефинираш разни форми с еднаква функционалност като отделни класове, и да ги преизползваш където си искаш, като дори може да ги модифицираш - примерно имаш базова форма, и й добавяш по някое поле според случая. Опитай се всеки код, който се ползва на различни места - дали ще е форма, дали ще е някакъв малък темплейт - да си ги вадиш на класове, и да ги преизползваш. Това ще ти спести много работа впоследствие. MVC предлага доста улеснения в това.

            П.С. Всъщност едно view(public ActionResult ViewName(params..)) накрая прави Render в html template. Може да си имаш някакви базови темплейти за форма(edit, update, delete), и просто да го използваш тоя темплейт на 100 места...

            Като напреднеш малко с MVC, може да хвърлиш едно око и на extensions - HtmlHelpers, това може да ти помогне адски много да си реализираш някаква абстракция, понеже предполагам като имаш 350 форми, то всеки 5-6 от тях имат много общо, и биха могли да се вкарат в нещо базово + extension ...
            Вярата в конспирации е опростяване, което ни помага да обясняваме всичко.

            Коментар


            • От: Разни въпроси към WEB-аджиите...

              Първоначално публикуван от Tihomir(imageo) Преглед на мнение
              Предполагам, под форма имаш предвид MvcForm, а не View. Няма проблем в 1 View да обработваш няколко форми. Но се опитай да си ги разделиш функционално на View-та. Тук по-скоро би трябвало 1 View == 1 Таб във VB програмата, според зависи как точно са ти организирани нещата. То не пречи да си share-ваш форма между View-та, но тук вече почваме да задълбаваме в конкретната имплементация. То може да си дефинираш разни форми с еднаква функционалност като отделни класове, и да ги преизползваш където си искаш, като дори може да ги модифицираш - примерно имаш базова форма, и й добавяш по някое поле според случая. Опитай се всеки код, който се ползва на различни места - дали ще е форма, дали ще е някакъв малък темплейт - да си ги вадиш на класове, и да ги преизползваш. Това ще ти спести много работа впоследствие. MVC предлага доста улеснения в това.

              П.С. Всъщност едно view(public ActionResult ViewName(params..)) накрая прави Render в html template. Може да си имаш някакви базови темплейти за форма(edit, update, delete), и просто да го използваш тоя темплейт на 100 места...

              Като напреднеш малко с MVC, може да хвърлиш едно око и на extensions - HtmlHelpers, това може да ти помогне адски много да си реализираш някаква абстракция, понеже предполагам като имаш 350 форми, то всеки 5-6 от тях имат много общо, и биха могли да се вкарат в нещо базово + extension ...
              Имах в предвид VB6 форми. Всяко "прозорче" е форма там. Както и да е де - написаното пак ще ми свърши добра работа.

              Нещо друго да попитам - ще имам доволно количество View-та, върху които трябва под някаква форма да има progress bar и отгоре (или отдолу) лейбъл, който да показва например при по-времеемки процеси какво става в момента и до къде е стигнал процеса. Това май ще трябва през скрипт на клиентската машина, но как точно да си взима данните от сървъра, да речем през секунда-две? Идеята ми е статуса (до къде е стигнал процеса, и какво прави в момента) да се записват в същия тоя WorkSession обект, но въпроса е как се реализира комуникацията между сървъра и скрипта на клиентската машина в такива случаи?

              ПП: Хелперите ги гледах преди няколко дни. Наистина ценна екстра, и имам едно наум, ако преценя че някъде биха свършили работа.
              Последно редактирано от sparkybg; 28-07-12, 13:15.
              Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

              Коментар


              • От: Разни въпроси към WEB-аджиите...

                Точно, питанката ми беше, че не трябва да приравняваш 1 VB Form към 1 View, а по-скоро към 1 MvcForm.

                Относно втория въпрос - хрумва ми едно такова решение:
                Ако имаш такива таскове, които се джуркат продължително време, добре е да си реализираш някаква система за schedule на таскове - може да ползваш например ThreadPool.QueueUserWorkItem, http://blog.stackoverflow.com/2008/0...sks-in-aspnet/ или разни продукти като http://quartznet.sourceforge.net/. Та всъщност си вкарваш long-running таска в queue, и връщаш респонса на клиента. После с Ajax правиш да кажем рекуест към:

                www.mysite.com/status/1234567890 - като това последното е worksessionid или каквото друго се сетиш за Id, и това да ти връща процентите, които да си чертаеш там на прогресбар. А как самото View status(worksessionid) ще взема тези проценти - може да записваш в базата статуса, и да си го четеш оттам. Може и през User.Session, но ще е малко по-сложно. База е най-просто. Все пак се изпълнява в отделен тред и нямаш достъп до Application, Session обекти, те се dispose-ват принципно като завърши рекуеста.
                Вярата в конспирации е опростяване, което ни помага да обясняваме всичко.

                Коментар


                • От: Разни въпроси към WEB-аджиите...

                  Първоначално публикуван от Tihomir(imageo) Преглед на мнение
                  Точно, питанката ми беше, че не трябва да приравняваш 1 VB Form към 1 View, а по-скоро към 1 MvcForm.
                  Ми там е работата че, малко трудно вдявам каква е разликата. Мога да видя че View-а с отделен контролер е по-универсален от форма, защото може да се ползва от няколко контролера, но съм до там.
                  Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                  Коментар


                  • От: Разни въпроси към WEB-аджиите...

                    Да задам въпроса иначе - във View-овете се мъдри "@using html.BeginForm(....".

                    Да разбирам ли че нещата, намиращи е между началото и края на формата ще се постнат към сървъра? Демек, не се поства цялата страница, а само формата? Ако има няколко форми в едно View (възможно ли е?), всяко със submit бутон, да разборам ли че всяка отделна форма ще се постне, натискайки нейния си бутон?

                    Малко ми е мъгляво да намеря друг смисъл на това, и разликата между "View" и "Form". Един вид формата е само част от даден View, в контролера може да се напише код за обработване на постове от няколко форми, намиращи се във един или повече View-та, а отделно всеки View в себе си може да съдържа контент за всички contentplaceholder-и в мастър страницата?

                    Правилно ли схващам?
                    Последно редактирано от sparkybg; 29-07-12, 16:38.
                    Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                    Коментар


                    • От: Разни въпроси към WEB-аджиите...

                      'псулютно ! Ето и пример: http://blogs.imeta.co.uk/MBest/archi...01/19/833.aspx

                      Единствено валидацията изисква малко повече внимание, но примера е точно затова. А иначе - формата е форма, когато се POST–ва към някой адрес. Т.е. самия таг:


                      <%using (Html.BeginForm("Logon", "Logon"))
                      всъщност се render-ва като:

                      <form method="POST" action="account/login">

                      И action е controller/view който ще приеме данните от формата. На една страница(View) може да имаш десетки форми, които да си събмитват където си искат. То реално така се и прави, като широко-използвана практика е(както писах по-рано в темата), след като се обработи POST заявката, да се направи Redirect(view_name), което да върне User-а обратно на тази страница с формите(или на друга за преглед на промените). Един вид контролера/view–то което обработва POST-а не вади HTML, а само приема заявката и редиректва.
                      Вярата в конспирации е опростяване, което ни помага да обясняваме всичко.

                      Коментар


                      • От: Разни въпроси към WEB-аджиите...

                        Първоначално публикуван от Tihomir(imageo) Преглед на мнение
                        'псулютно !
                        Мерси!. Друго си е с думи прости.

                        Щом вече згрявам и сам някои неща, значи току виж станало от мен нещо.

                        Обади ми се на събора да се начерпим, ако ще идваш. А до тогава сигурно ще имам и още питанки, ама всяко нещо с времето си.
                        Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                        Коментар


                        • От: Разни въпроси към WEB-аджиите...

                          Още нещо - как да си "дефинирам" прозорче върху страницата, в което да се показва някакъв HTML контент, и то да си има слайдове отстрани, ако контента е по-широк или по-висок от размерите на "прозорчето"? Нещо като "textarea", ама не с текст вътре, а с HTML контент.
                          Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                          Коментар


                          • От: Разни въпроси към WEB-аджиите...

                            До тук видях <frameset> с фреймове вътре и <iframe> със същото, обаче и двете искат "src="нещо си.html", тоест, показват друга страница. А аз искам просто да показват контент, дефиниран в рая страница между отварянето и затварянето на тага. Мота ми се нещо със стиловете, и да се направи в <div> таг ама още не мога да го надуша.

                            ПП: Видях. Нормален div, с посочени width и height, и overflow:scroll. Брей, да видиш ти лесниния.
                            Последно редактирано от sparkybg; 30-07-12, 00:00.
                            Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                            Коментар


                            • От: Разни въпроси към WEB-аджиите...

                              Стигнахме и до по-изчекнати неща. Модал диалози и прочие полуции. Как намирате Jquery, Jquery-ui и прочие? В смисъл, да се мятам ли? Питам, щото ей-тъй почти си направих собствен вариант на диалога, на чист javascript, че даже и без ajax. Посвикнах на курвенските номера на тоя и оня броузър и прочие, а днес цял ден се боря като прасе с тиква с диалога на jquery-ui-то, и преди половин час се оказа бъг в jquery-vsdoc, който като подмених с еквивалента му без "vsdoc", всичко тръгна като слънце. Съответно за пореден път псувах като хамалин половин ден.

                              Та, струва ли си да ползвам тия хитринки, или да пиша тонове код на чист javascript, със все великите битки с някой броузър, дето прави нещо не баш като другите? (Впрочем, сега разбирам що недолюбвате толкова IE-то )/
                              Интернет експлорър: Безплатно предоставян от Майкрософт тул за сваляне на браузер по избор.

                              Коментар


                              • Re: Разни въпроси към WEB-аджиите...

                                Няма никакъв смисъл да пишеш, JQuery става, също и YUI .
                                Няма никакъв смисъл да откриваш топлата вода освен ако не е нещо простичко и супер специфично.

                                Коментар

                                Активност за темата

                                Свий

                                В момента има 1 потребители онлайн. 0 потребители и 1 гости.

                                Най-много потребители онлайн 8,787 в 16:37 на 21-06-23.

                                Зареждам...
                                X