[CLOSED] DirectMethod in a MasterPage

Page 1 of 2 12 LastLast
  1. #1

    [CLOSED] DirectMethod in a MasterPage

    Hi,
    When I am trying to call Direct Method declared in a MasterPage I get the following error :

    The ajax instance method 'TEST' is absent!

    Here's the code. Try calling DM.Test()

    Page.aspx:
    <%@ Page Title="" Language="C#" MasterPageFile="~/system/templates/browser.master" AutoEventWireup="true" CodeBehind="accident.aspx.cs" Inherits="Web.ui.browsers.accident" %>
    <%@ MasterType VirtualPath="~/system/templates/browser.master" %>
    MasterPage.aspx
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Ext.Net;
    namespace Web.ui.browsers
    {
        public partial class accident : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }
    
    
        }
    }
    MasterPage
    <%@ Master Language="C#" MasterPageFile="~/system/templates/content.master" AutoEventWireup="true" CodeBehind="browser.master.cs" Inherits="Web.system.templates.browser" %>
    
    
    <asp:Content ID="Content1" ContentPlaceHolderID="innerhead" runat="server">
        <script src="../../global/js/browser.js"></script>
        <style type="text/css">
            .x-grid-row-summary .x-grid-cell-inner {
                font-weight: bold;
                font-size: 11px;
                background-color : #f1f2f4;
            } 
        </style>
    
    
    </asp:Content>
    
    
    <asp:Content ID="Content2" ContentPlaceHolderID="innercontent" runat="server">
    <ext:Viewport runat="server" ID="browserViewport" Layout="FitLayout">
    </ext:Viewport>
    </asp:Content>
    MasterPage.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Web.Browser;
    using Ext.Net;
    using Newtonsoft.Json;
    
    
    namespace Web.system.templates
    {
        [DirectMethodProxyID(IDMode = DirectMethodProxyIDMode.None)]
        public partial class browser : System.Web.UI.MasterPage
        {
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
            }
    
    
    
    
            [DirectMethod]
            public string TEST()
            {
    
    
                return "a";
            }
    
    
            
        }
    }
    Last edited by Daniil; Jul 23, 2013 at 12:55 PM. Reason: [CLOSED]
  2. #2
    I don't see your ResourceManager. Also, why do you use DM namespace for DirectMethods? Also, it's better to use special wildcard #{DirectMethods}. I've tried with the following sample and it works:

    MasterPage.aspx
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="Ext.Net.Examples.Site1" %>
    
    <script runat="server">
        [DirectMethod]
        public void DoSomething()
        {
            X.Msg.Notify("Time", DateTime.Now.ToLongTimeString()).Show();
        }
    </script>
    
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Ext.NET Example</title>
        <asp:ContentPlaceHolder ID="head" runat="server" />
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
     
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </form>
    </body>
    </html>
    MasterPage.aspx.cs
    [DirectMethodProxyID(IDMode = DirectMethodProxyIDMode.None)]
    public partial class Site1 : System.Web.UI.MasterPage
    {
    	protected void Page_Load(object sender, EventArgs e)
    	{
    
    	}
    }
    Page:
    <%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Ext.Net.Examples.WebForm1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <ext:Button runat="server" Text="Submit" OnClientClick="#{DirectMethods}.DoSomething();" />
    </asp:Content>
  3. #3
    Hi,

    Be careful with #{DirectMethods}. It might not work in some complex scenarios.
  4. #4
    Hi Baidaly,
    I missed the the resource manager. Please test using the code I sent with the following MasterPage. It does'nt work.
    Also, I user DirectMethodNamespace to keep my DirectMethods organised. I don't see why that should be an issue. There is something else I am missing, which I cannot figure. Can you run my exactly my sample with the folliwng master page.

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="browser.master.cs" Inherits="Web.system.templates.browser" %>
     
     
    <asp:Content ID="Content1" ContentPlaceHolderID="innerhead" runat="server">
        <script src="../../global/js/browser.js"></script>
        <style type="text/css">
            .x-grid-row-summary .x-grid-cell-inner {
                font-weight: bold;
                font-size: 11px;
                background-color : #f1f2f4;
            } 
        </style>
     
     
    </asp:Content>
     
     
    <asp:Content ID="Content2" ContentPlaceHolderID="innercontent" runat="server">
    <ext:ResourceManager ID="extrm" runat="server" DirectMethodNamespace="DM">
            </ext:ResourceManager>
    <ext:Viewport runat="server" ID="browserViewport" Layout="FitLayout">
    </ext:Viewport>
    </asp:Content>

    Quote Originally Posted by Baidaly View Post
    I don't see your ResourceManager. Also, why do you use DM namespace for DirectMethods? Also, it's better to use special wildcard #{DirectMethods}. I've tried with the following sample and it works:

    MasterPage.aspx
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="Ext.Net.Examples.Site1" %>
    
    <script runat="server">
        [DirectMethod]
        public void DoSomething()
        {
            X.Msg.Notify("Time", DateTime.Now.ToLongTimeString()).Show();
        }
    </script>
    
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Ext.NET Example</title>
        <asp:ContentPlaceHolder ID="head" runat="server" />
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager runat="server" />
     
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
        </form>
    </body>
    </html>
    MasterPage.aspx.cs
    [DirectMethodProxyID(IDMode = DirectMethodProxyIDMode.None)]
    public partial class Site1 : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    }
    Page:
    <%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Ext.Net.Examples.WebForm1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <ext:Button runat="server" Text="Submit" OnClientClick="#{DirectMethods}.DoSomething();" />
    </asp:Content>
  5. #5
    I am getting this exception: Content controls are allowed only in content page that references a master page.

    Indeed, I see <asp:Content> in the MasterPage, but it seems has not reference to another MasterPage.
  6. #6
    Hi Daniil,
    My mistake. I will put up everything together in one zip file and send it to you.

    Thanks,
  7. #7
    If possible, it would be better to post the required things here wrapping in [CODE] tags.

    To avoid many code snippets, you can place code behind directly on ASPX pages by wrapping in
    <script runat="server">
        // code behind stuff
    </script>
  8. #8
    Hi Daniil,
    Please check the following:

    I observed that, having if I have resourcemanager in text.aspx page, everything works well, but if I have resource manager in base.master, DirectMethod registers on client side, but throws the exception on execution. Please check for yourself by running test.aspx. Do the following :

    1) Run test.aspx
    2) Call DM.Test() from the JS console.

    base.MASTER
    <%@ Master Language="C#" AutoEventWireup="true" %>
    
    
    <!DOCTYPE html>
    
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
       
        <asp:ContentPlaceHolder ID="head" runat="server" />
    </head>
    <body>
        <form id="frm" runat="server">
        <div>
            <ext:ResourceManager ID="extrm" runat="server" DirectMethodNamespace="DM">
            </ext:ResourceManager>
            <asp:ContentPlaceHolder ID="content" runat="server" />
        </div>
        </form>
    </body>
    </html>
    content.MASTER
    <%@ Master Language="C#" MasterPageFile="~/system/templates2/base.master" AutoEventWireup="true"%>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <asp:ContentPlaceHolder ID="innerhead" runat="server" />
    </asp:Content>
    
    
    <asp:Content ID="Content2" ContentPlaceHolderID="content" runat="server">
    <asp:ContentPlaceHolder ID="innercontent" runat="server" />
    </asp:Content>
    browser.MASTER
    <%@ Master Language="C#" MasterPageFile="~/system/templates2/content.master" AutoEventWireup="true"%>
    <script runat="server">
        [DirectMethod]
        public string TEST()
        {
            Ext.Net.MultiSelect t = new MultiSelect();
            Ext.Net.Panel p = new Ext.Net.Panel();
            p.Add(t);
            return p.ToScript();
        }
    </script>
    <asp:Content ID="Content1" ContentPlaceHolderID="innerhead" runat="server">
        
    </asp:Content>
    
    
    <asp:Content ID="Content2" ContentPlaceHolderID="innercontent" runat="server">
    <ext:Viewport runat="server" ID="browserViewport" Layout="FitLayout">
    </ext:Viewport>
    </asp:Content>
    test.aspx
    <%@ Page Title="" Language="C#" MasterPageFile="~/system/templates2/browser.master" AutoEventWireup="true" %>
    <%@ MasterType VirtualPath="~/system/templates2/browser.master" %>
  9. #9
    Try to add IDMode attribute:

    <script runat="server">
        [DirectMethod(IDMode = DirectMethodProxyIDMode.ID)]
        public string TEST()
        {
            Ext.Net.MultiSelect t = new MultiSelect();
            Ext.Net.Panel p = new Ext.Net.Panel();
            p.Add(t);
            return p.ToScript();
        }
    </script>
  10. #10
    Hi Baidaly,
    Did you try this at your end? It does'nt work. I just tried. Please try it your end. Are you able to reproduce the error?
Page 1 of 2 12 LastLast

Similar Threads

  1. [CLOSED] MasterPage best practice
    By jchau in forum 2.x Legacy Premium Help
    Replies: 3
    Last Post: Jun 24, 2013, 5:43 AM
  2. [CLOSED] DirectMethod call from page contained in a masterpage
    By egvt in forum 1.x Legacy Premium Help
    Replies: 4
    Last Post: May 18, 2012, 5:36 PM
  3. [CLOSED] Nested MasterPage with DirectMethod
    By jmcantrell in forum 1.x Legacy Premium Help
    Replies: 5
    Last Post: May 09, 2012, 7:18 PM
  4. [CLOSED] Difference between DirectMethod , DirectEvent, Static DirectMethod
    By syllabusarq in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Mar 01, 2011, 11:37 AM
  5. Masterpage Combobox
    By afhi in forum 1.x Help
    Replies: 1
    Last Post: May 18, 2009, 1:58 PM

Posting Permissions