How could I change the NavigateUrl property at runtime based on another controls property ?

Discussion in 'ASP .Net' started by Radu, Jan 24, 2007.

  1. Radu

    Radu Guest

    Hi, I have a "select" control named "cboSelectScorecardType", defined
    as

    <select id="cboSelectScorecardType"
    size="1"
    runat="server">
    </select>

    which shows a list of files on my drive. It does not post back, nor do
    I want it to. After the user selects a document in the combo, I want a
    hyperlink defined in the same page as

    <asp:HyperLink
    Target="_blank"
    NavigateUrl="javascript:Concat();"
    ID="cmdOpenScorecardPreview"
    Text="here"
    runat="server">
    </asp:HyperLink>

    to have the NavigateURL property set to whatever the combo points to,
    so that the user can click on it to preview the document selected in
    the combo, so therefore I tried to use this:

    function MyConcat()
    {
    return String.Concat(
    "~",
    "\Scorecard Previews\",

    cboSelectScorecardType.Items(cboSelectScorecardType.SelectedIndex).ToString,

    ".doc"
    );
    }

    I confess I don't really know JavaScript.

    What am I doing wrong ? Is there a simpler way to do this ? There is no
    server event I can write my code into...

    Thanks, Alex
    Radu, Jan 24, 2007
    #1
    1. Advertising

  2. Radu

    Radu Guest

    Re: How could I change the NavigateUrl property at runtime based on an

    Hi, Milosz, it works great, thank you very much !

    :)) raduspage.aspx... Cute :))

    I read the code, I translated it (mentally) from C# to VB (I don't know
    much C#), and it makes sense.

    However, I have one question: It says "OnChange is not a valid
    attribute of element DropDownList" - however, hmmmmm, it works.

    Thanks again - I'll work now on translating it into VB and
    incorporating it into my program.

    Alex (or.... Radu) :))


    On Jan 24, 10:47 am, Milosz Skalecki [MCAD] <>
    wrote:
    > Hi radu,
    >
    > I see you don't quite understand the asp.net concept as you're mixing server
    > and client sides. But don't worry, i created a simple example to help you
    > with dynamic document previewing. Example consists of two pages, one
    > containing combo box for selecting word document, and second, which displays
    > the document. Please note you have to populate combo box with file names
    > users can preview (i.e. using system.IO.File.GetFiles() method)
    >
    > -- begin raduspage.aspx html code --
    >
    > <%@ Page Language="C#" AutoEventWireup="true" CodeFile="RadusPage.aspx.cs"
    > Inherits="RadusPage" %>
    >
    > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    >
    > <html xmlns="http://www.w3.org/1999/xhtml" >
    > <head runat="server">
    > <title>Untitled Page</title>
    > </head>
    > <body>
    > <form id="form1" runat="server">
    > <div>
    > <asp:DropDownList runat="server" ID="fileList" onchange="previewFile(this)">
    > <asp:ListItem Text="Please select a file"/>
    > <asp:ListItem Text="file1.doc"/>
    > <asp:ListItem Text="file2.doc"/>
    > <asp:ListItem Text="file3.doc"/>
    > </asp:DropDownList>
    > </div>
    >
    > <div style="padding: 10px; border: solid 1px black; width: 500px;
    > height: 350px">
    > <iframe src="preview.aspx" runat="server" id="viewer"
    > frameborder="0"></iframe>
    > </div>
    >
    > <script language="javascript">
    > //<!--
    > function previewFile(cbo)
    > {
    > var index = cbo.selectedIndex;
    > // first item is ' please select...'
    > if (index > 0)
    > {
    > var ifr = document.getElementById('<%=viewer.ClientID %>');
    > ifr.src = 'preview.aspx?file=' + escape(cbo.options[index].text);
    > }
    > }
    > //-->
    > </script>
    >
    > </form>
    > </body>
    > </html>
    > -- end --
    >
    > Second apsx page: Remove all html code from this page - leave
    >
    > <%@ Page Language="C#" AutoEventWireup="true" CodeFile="preview.aspx.cs"
    > Inherits="preview" %>
    >
    > only
    >
    > -- begin preview.aspx c# code behind --
    >
    > using System;
    > using System.Data;
    > using System.Configuration;
    > using System.Collections;
    > using System.Web;
    > using System.Web.Security;
    > using System.Web.UI;
    > using System.Web.UI.WebControls;
    > using System.Web.UI.WebControls.WebParts;
    > using System.Web.UI.HtmlControls;
    >
    > public partial class preview : System.Web.UI.Page
    > {
    > protected void Page_Load(object sender, EventArgs e)
    > {
    > string value = Request.QueryString["file"];
    >
    > if (String.IsNullOrEmpty(value))
    > {
    > Response.Write("File has not been selected yet.");
    > }
    > else
    > {
    > AttachFile(value);
    > }
    > }
    >
    > private void AttachFile(string file)
    > {
    > // i put my example word files in application's root directory
    > file = Server.MapPath("~/" + file);
    >
    > if (System.IO.File.Exists(file))
    > {
    > // determine the MIME content type i.e. using extension
    > // for word documents MIME type equals : application/msword
    > Response.ContentType = "application/msword";
    > Response.WriteFile(file);
    > }
    > else
    > {
    > Response.Write("File cannot be found");
    > }
    >
    > Response.End();
    > }
    >
    > }-- end c# code
    >
    > Hope this helps
    > Milosz
    >
    >
    >
    > "Radu" wrote:
    > > Hi, I have a "select" control named "cboSelectScorecardType", defined
    > > as

    >
    > > <select id="cboSelectScorecardType"
    > > size="1"
    > > runat="server">
    > > </select>

    >
    > > which shows a list of files on my drive. It does not post back, nor do
    > > I want it to. After the user selects a document in the combo, I want a
    > > hyperlink defined in the same page as

    >
    > > <asp:HyperLink
    > > Target="_blank"
    > > NavigateUrl="javascript:Concat();"
    > > ID="cmdOpenScorecardPreview"
    > > Text="here"
    > > runat="server">
    > > </asp:HyperLink>

    >
    > > to have the NavigateURL property set to whatever the combo points to,
    > > so that the user can click on it to preview the document selected in
    > > the combo, so therefore I tried to use this:

    >
    > > function MyConcat()
    > > {
    > > return String.Concat(
    > > "~",
    > > "\Scorecard Previews\",

    >
    > > cboSelectScorecardType.Items(cboSelectScorecardType.SelectedIndex).ToString­,

    >
    > > ".doc"
    > > );
    > > }

    >
    > > I confess I don't really know JavaScript.

    >
    > > What am I doing wrong ? Is there a simpler way to do this ? There is no
    > > server event I can write my code into...

    >
    > > Thanks, Alex- Hide quoted text -- Show quoted text -
    Radu, Jan 24, 2007
    #2
    1. Advertising

  3. Re: How could I change the NavigateUrl property at runtime based o

    Hi again Radu,

    Parser error "OnChange is not a valid attribute of element DropDownList" is
    caused by the fact DropDownControl doesn’t have such property, but it will be
    rendered as expected in representing HTML code (as you may know dropdownlist
    renders as <select> html tag). Such trick is allowed and it’s called
    “expandoâ€. You can of course avoid it, removing OnChange=â€â€ attribute from
    DropDownList and add it programmatically onpageload event handler:

    cboSelectScorecardType.Attributes["onchange"] = "previewFile(this)"

    Regards

    Milosz



    "Radu" wrote:

    > Hi, Milosz, it works great, thank you very much !
    >
    > :)) raduspage.aspx... Cute :))
    >
    > I read the code, I translated it (mentally) from C# to VB (I don't know
    > much C#), and it makes sense.
    >
    > However, I have one question: It says "OnChange is not a valid
    > attribute of element DropDownList" - however, hmmmmm, it works.
    >
    > Thanks again - I'll work now on translating it into VB and
    > incorporating it into my program.
    >
    > Alex (or.... Radu) :))
    >
    >
    > On Jan 24, 10:47 am, Milosz Skalecki [MCAD] <>
    > wrote:
    > > Hi radu,
    > >
    > > I see you don't quite understand the asp.net concept as you're mixing server
    > > and client sides. But don't worry, i created a simple example to help you
    > > with dynamic document previewing. Example consists of two pages, one
    > > containing combo box for selecting word document, and second, which displays
    > > the document. Please note you have to populate combo box with file names
    > > users can preview (i.e. using system.IO.File.GetFiles() method)
    > >
    > > -- begin raduspage.aspx html code --
    > >
    > > <%@ Page Language="C#" AutoEventWireup="true" CodeFile="RadusPage.aspx.cs"
    > > Inherits="RadusPage" %>
    > >
    > > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    > > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    > >
    > > <html xmlns="http://www.w3.org/1999/xhtml" >
    > > <head runat="server">
    > > <title>Untitled Page</title>
    > > </head>
    > > <body>
    > > <form id="form1" runat="server">
    > > <div>
    > > <asp:DropDownList runat="server" ID="fileList" onchange="previewFile(this)">
    > > <asp:ListItem Text="Please select a file"/>
    > > <asp:ListItem Text="file1.doc"/>
    > > <asp:ListItem Text="file2.doc"/>
    > > <asp:ListItem Text="file3.doc"/>
    > > </asp:DropDownList>
    > > </div>
    > >
    > > <div style="padding: 10px; border: solid 1px black; width: 500px;
    > > height: 350px">
    > > <iframe src="preview.aspx" runat="server" id="viewer"
    > > frameborder="0"></iframe>
    > > </div>
    > >
    > > <script language="javascript">
    > > //<!--
    > > function previewFile(cbo)
    > > {
    > > var index = cbo.selectedIndex;
    > > // first item is ' please select...'
    > > if (index > 0)
    > > {
    > > var ifr = document.getElementById('<%=viewer.ClientID %>');
    > > ifr.src = 'preview.aspx?file=' + escape(cbo.options[index].text);
    > > }
    > > }
    > > //-->
    > > </script>
    > >
    > > </form>
    > > </body>
    > > </html>
    > > -- end --
    > >
    > > Second apsx page: Remove all html code from this page - leave
    > >
    > > <%@ Page Language="C#" AutoEventWireup="true" CodeFile="preview.aspx.cs"
    > > Inherits="preview" %>
    > >
    > > only
    > >
    > > -- begin preview.aspx c# code behind --
    > >
    > > using System;
    > > using System.Data;
    > > using System.Configuration;
    > > using System.Collections;
    > > using System.Web;
    > > using System.Web.Security;
    > > using System.Web.UI;
    > > using System.Web.UI.WebControls;
    > > using System.Web.UI.WebControls.WebParts;
    > > using System.Web.UI.HtmlControls;
    > >
    > > public partial class preview : System.Web.UI.Page
    > > {
    > > protected void Page_Load(object sender, EventArgs e)
    > > {
    > > string value = Request.QueryString["file"];
    > >
    > > if (String.IsNullOrEmpty(value))
    > > {
    > > Response.Write("File has not been selected yet.");
    > > }
    > > else
    > > {
    > > AttachFile(value);
    > > }
    > > }
    > >
    > > private void AttachFile(string file)
    > > {
    > > // i put my example word files in application's root directory
    > > file = Server.MapPath("~/" + file);
    > >
    > > if (System.IO.File.Exists(file))
    > > {
    > > // determine the MIME content type i.e. using extension
    > > // for word documents MIME type equals : application/msword
    > > Response.ContentType = "application/msword";
    > > Response.WriteFile(file);
    > > }
    > > else
    > > {
    > > Response.Write("File cannot be found");
    > > }
    > >
    > > Response.End();
    > > }
    > >
    > > }-- end c# code
    > >
    > > Hope this helps
    > > Milosz
    > >
    > >
    > >
    > > "Radu" wrote:
    > > > Hi, I have a "select" control named "cboSelectScorecardType", defined
    > > > as

    > >
    > > > <select id="cboSelectScorecardType"
    > > > size="1"
    > > > runat="server">
    > > > </select>

    > >
    > > > which shows a list of files on my drive. It does not post back, nor do
    > > > I want it to. After the user selects a document in the combo, I want a
    > > > hyperlink defined in the same page as

    > >
    > > > <asp:HyperLink
    > > > Target="_blank"
    > > > NavigateUrl="javascript:Concat();"
    > > > ID="cmdOpenScorecardPreview"
    > > > Text="here"
    > > > runat="server">
    > > > </asp:HyperLink>

    > >
    > > > to have the NavigateURL property set to whatever the combo points to,
    > > > so that the user can click on it to preview the document selected in
    > > > the combo, so therefore I tried to use this:

    > >
    > > > function MyConcat()
    > > > {
    > > > return String.Concat(
    > > > "~",
    > > > "\Scorecard Previews\",

    > >
    > > > cboSelectScorecardType.Items(cboSelectScorecardType.SelectedIndex).ToString­,

    > >
    > > > ".doc"
    > > > );
    > > > }

    > >
    > > > I confess I don't really know JavaScript.

    > >
    > > > What am I doing wrong ? Is there a simpler way to do this ? There is no
    > > > server event I can write my code into...

    > >
    > > > Thanks, Alex- Hide quoted text -- Show quoted text -

    >
    >
    =?Utf-8?B?TWlsb3N6IFNrYWxlY2tpIFtNQ0FEXQ==?=, Jan 25, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Boban Dragojlovic
    Replies:
    3
    Views:
    3,032
    vMike
    Oct 29, 2003
  2. timmso
    Replies:
    2
    Views:
    2,282
    Fatherjack
    Sep 4, 2008
  3. Cynic07
    Replies:
    0
    Views:
    415
    Cynic07
    May 20, 2004
  4. Karl
    Replies:
    1
    Views:
    4,043
    kphani_prasad
    Jun 10, 2009
  5. Replies:
    1
    Views:
    592
    =?Utf-8?B?RWx0b24gVw==?=
    Mar 8, 2006
Loading...

Share This Page