Member 13973078 Ответов: 1

Модальный триггер и изображения, работающие только на странице по умолчанию


Итак, у меня есть страница, которая использует маршрутизацию URL-адресов и имеет несколько панелей. Некоторые панели должны показывать содержимое по умолчанию, в то время как некоторые панели становятся видимыми на основе запрошенного URL-адреса (содержимое по умолчанию + дополнительное содержимое).
Таким образом, содержимое по умолчанию(например, http.../Home) содержит триггерную кнопку для модала и две панели, содержащие изображения и некоторый текст.

Поэтому, когда я загружаю страницу по умолчанию (т. е. https..../Home), все работает нормально, модальный триггер работает отлично, и изображения отображаются так, как они должны.

Но если я запрошу другой URL (http.../Home/abc --> который обрабатывается маршрутизацией url) Все панели контента (Контент по умолчанию + дополнительный контент) становятся видимыми, но изображения не отображаются, вместо этого я получаю значок сломанного изображения(даже изображение, которое видно на странице по умолчанию, становится значком сломанного изображения), и модальный триггер также не работает. Ничего не произойдет, если я нажму на нее.

Весь код находится на одной странице, но все равно он не работает, и я не могу понять, что не так...Особенно с изображениями, изображения связаны с внешней http-ссылкой, которая действительно работает при нажатии на значки разбитого изображения, так что там что-то происходит, но не изображение?

вот код на C#:

protected void Page_Load(object sender, EventArgs e)
        {
                string clientname;
                if (GetRouteUrl(RouteData.Values["name"]) == null || RouteData.Values["name"] == null)
                {
                    // invalid info/ page
                }
                else 
                {
                    clientname = RouteData.Values["name"].ToString();
                
                if (clientname == "abc")
                {
                    Panel_2.Visible = true;
                    Panel_logo2.Visible = true;
                }
                else if (clientname == "xyz")
                {

                    Panel_1.Visible = true;
                    Panel_logo1.Visible = true;
                }
                else
                {
                    // invalid page/info
                }
                }
                }



код в aspx:


<form id="form1" runat="server" >
         <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager> 

        <!-- Container for logos -->
       <div class="container">
            <div class="row">
                <div class="col">
                     <a href="http....../">  <img src="logo/default_logo" class="rounded float-left" height="100" width="200"/>  </a>
                </div>
                <div class="col-6 text-center">
                    <h1> stuff </h1>
                </div>

                <!-- abc  logo -->
                <div class="col">
                    <asp:Panel ID="Panel_logo1" runat="server" Visible="false">
                        <a href="http..."> <img src="logo/1" class="rounded float-right" height="100" width="200" />  </a>
                    </asp:Panel>

                    <!-- xyz logo  -->
                    <asp:Panel ID="Panel_logo2" runat="server" Visible="false">
                        <a href="https...."><img src="logo/2" class="rounded float-right" height="100" width="200"/>  </a>
                    </asp:Panel>
                    
                </div>
            </div>
        </div>

        <!-- End of Containers for logo -->

        

         <!-- Default section -->
         <div class="container">
             <div class="jumbotron">
                 <div class="col">
                     <p> some default stuff which shows up at all times</p>
                     <p>
                         more stuff
                     </p>

                    </div>
             </div>
         </div>

        
         <!-- abc -->
         <asp:Panel ID="Panel_abc" runat="server" Visible="false">
        <div class="container">
            <div class="jumbotron">
            <div class="col">
                <h1> ABC section</h1>
                <p> Section for message of ABC </p>
         </div>
         </div>
            </div>
        </asp:Panel>
             

         <!-- xyz-->
         <asp:Panel ID="Panel_xyz" runat="server" Visible="false">
            <div class="container">
                <div class="jumbotron">
                <div class="col">
                    <h1>XYZ Section</h1>
                    <p> Section for message of XYZ</p>
                    </div>
                    </div>
            </div>
            </asp:Panel>

        <!-- END -->

         <div class="container">
             <div class="row">
                    <div class=" col-sm-12 col-md-4">
                         <div class="card">
                             <div class="card-body">
                                 <p>stuff </p>
                                
                                 
                                 <!-- Button to trigger Login modal -->
                               
                                 <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#logger_modal">
                                    Modal Trigger
                                  </button> 
                             </div>
                         </div>
                     </div>
                     <div class="col">
                     </div>
                 </div>
             </div>


         <!--Modal code-->
        <div class="modal fade" id="logger_modal" tabindex="-1" role="dialog" aria-labelledby="logger_model1" aria-hidden="true">
          <div class="modal-dialog" role="document">
            <div class="modal-content">
              <div class="modal-header">
                <h6 class="modal-title" id="logger_modal1">Please provide the required credientials to Log In.</h6>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">×</span>
                </button>
              </div>
                
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                    <ContentTemplate>
                        <div class="modal-body align-content-center">
                            <asp:TextBox ....onkeydown="return (event.keyCode!=13);"></asp:TextBox>
                            <asp:RequiredFieldValidator... EnableClientScript="false" Display="Dynamic"></asp:RequiredFieldValidator>
                            <br />
                            <asp:TextBox...onkeydown="return (event.keyCode!=13);"></asp:TextBox>
                            <asp:RequiredFieldValidator...EnableClientScript="false" Display="Dynamic"></asp:RequiredFieldValidator>
                            </br> <asp:Label ID="Label1" runat="server" Class="alert"></asp:Label>
                        </div>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="..." />
                    </Triggers>
                       
                </asp:UpdatePanel>
                    
              <div class="modal-footer">
                  ............
              </div>
            </div>
          </div>
        </div>
             
         

    </form>


Что я уже пробовал:

<asp:Button class="btn btn-primary " ID="Modal_trigger" runat="server" Text="Login" data-toggle="modal" data-target="#logger-modal" OnClick="Modal_trigger_Click"/>


внутри метода Modal_trigger_Click() я вызываю функцию java script--> Для отображения модального модала.("показывать");
но сама кнопка в этом случае не работает даже на странице по умолчанию.

Bryian Tan

Кстати, это опечатка data-target="#logger-modal"? должно ли это быть data-target="#logger_modal" ?

Member 13973078

хммм..Я переписал эту часть кода (я удалил ее перед тем, как сделать этот пост) и убедился, что на этот раз я сохраняю написание таким же, но ничего не происходит.Еще одна вещь, которую я попробовал, - это когда на этой кнопке asp я поставил точку останова и узнал, что:-
- если я нахожусь на странице по умолчанию, то при нажатии на кнопку asp достигается точка останова кода OnClick, и модал фактически открывается в браузере, но только до тех пор, пока я не нажму "продолжить" и не продвинусь вперед по точке останова. Поэтому он открывается, но мгновенно закрывается
- если я нахожусь на одном из других URL-адресов (http...home/abc), модальный даже не открывается!, точка останова нажата, но ничего не происходит.

ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);

and the script:
<script type="text/javascript">
    function openModal() {
        $('#logger_modal').modal('show');
    }
</script>

lw@zi

Вы видите что-то в настройках разработчика - > консоль при загрузке страницы?

lw@zi

Нет, в браузере. Нажмите клавишу F12, как только вы открыли неисправную страницу, и обновите ее, чтобы увидеть, есть ли какие-либо ошибки на вкладке консоли в браузере.

Member 13973078

ладно, я там получаю ошибки..
сначала я получал эти ошибки:

-GET http://localhost:50866/Page/Scripts/jquery.min.js 404 (Not Found)
-abc:213 GET http://localhost:50866/Page/Scripts/popper.min.js 404 (Not Found)
-abc:215 GET http://localhost:50866/Page/Scripts/bootstrap.min.js 404 (Not Found)
-abc:12 Uncaught ReferenceError: $ is not defined    
at openModal (abc:12)    
at abc:212openModal 
@ abc:12(anonymous) 
@ abc:212revq:212 
-GET http://localhost:50866/Page/Scripts/jquery.min.js 404 (Not Found)revq:213 
-GET http://localhost:50866/Page/Scripts/popper.min.js 404 (Not Found)revq:215 
-GET http://localhost:50866/Page/Scripts/bootstrap.min.js 404 (Not Found)


поэтому я использовал PageresolveURL и он начал находить эти файлы но теперь он показывает другие ошибки:
-GET http://localhost:50866/Scripts/jquery.min.js%3E 404 (Not Found)
-Uncaught ReferenceError: $ is not defined    
at openModal (abc:14)    
at abc:214openModal
 @ abc:14(anonymous) 
@ abc:214
-GET http://localhost:50866/Scripts/jquery.min.js%3E 404 (Not Found)  abc:240
-Uncaught SyntaxError: Unexpected token export      popper.min.js:4-util.js:56 Uncaught TypeError: Cannot read property 'fn' of undefined    
at util.js:56    
at util.js:10    
at bootstrap.min.js:6    
at bootstrap.min.js:6(anonymous) 
@ util.js:56(anonymous) 
@ util.js:10(anonymous) 
@ bootstrap.min.js:6(anonymous) 
@ bootstrap.min.js:6


а также кнопка входа в систему (простая кнопка, а не кнопка asp:) перестала функционировать на этом этапе даже на странице по умолчанию. Он отлично работает(только на странице по умолчанию) без Page.resolveURL в скриптах src

lw@zi

Ваш тег скрипта для jquery.min.js это неправильно. Смотрите путь к файлу по ошибке. У вас есть дополнительный > (обозначается %3E). Теперь, поскольку ваша страница не может загрузить jquery, весь ваш JS-код, использующий ее, не будет работать.

Member 13973078

Клянусь, я дважды проверил эту строку кода, но ее там не было! и после того, как я прочитал ваш комментарий, указывающий на это, я пошел проверить еще раз, и к моему удивлению это было так!! Я чувствовал себя таким тупым, что не могу выразить словами...
Удаление этого дополнительного " >" заставляет модальный триггер работать идеально.
Кроме того, для кнопки asp:я удалил скрипт и вместо использования OnClick использовал OnClientClick= "return false", что также заставляет работать модальный триггер.
Теперь этот вопрос решен.
Огромное спасибо lw@zi

1 Ответов

Рейтинг:
5

F-ES Sitecore

<img src="logo/default_logo"


Это относительный url-адрес, он означает, что вы смотрите в папку под названием logo на текущем уровне страницы, поэтому на "/" он выглядит в "/logo/", но на "/abc" он выглядит в "/abc/logo"

Google Page.ResolveURL, чтобы узнать, как убедиться, что url-адрес всегда правильный, независимо от того, на какой странице он находится.


Member 13973078

Я обязательно проверю это и вернусь к вам..

Member 13973078

о'Кей, так что я читал о странице.ResolveURL и Clienturl, я не знал об этом..и это действительно решает проблему, с которой я столкнулся с изображениями(логотипами), не показывающимися.
это код, который у меня есть сейчас, вместо jut, предоставляющего путь к файлу логотипа, я использую Page.ResolveURL и~, чтобы получить путь для "img src" из корня моего проекта, а не со страницы, на которой он написан.

<img src="<%= Page.ResolveUrl("~/logo/default_logo")%>" class="rounded float-left" height="100" width="200"/> 

спасибо - "F-ES Sitecore" за то, что заставил меня узнать еще одну вещь.