Gå til innhold

Anbefalte innlegg

Sliter med en ASP.NET Calendar som lukkes når jeg trykker på "forrige/neste måned."

 

Jeg vil da at den ikke skal lukkes, men bare lukkes når en velger dato.

 

<script type="text/javascript">
var timeout	= 300;
var closetimer	= 0;
var dropdown	= 0;

function mopen(id)
{
	mcancelclosetime();
	if(dropdown) dropdown.style.visibility = 'hidden';
	dropdown = document.getElementById(id);
	dropdown.style.visibility = 'visible';
}

function mclose()
{
	if(dropdown) dropdown.style.visibility = 'hidden';
}

function mclosetime()
{
	closetimer = window.setTimeout(mclose, timeout);
}

function mcancelclosetime()
{
	if(closetimer)
	{
		window.clearTimeout(closetimer);
		closetimer = null;
	}
}
document.onclick = mclose;
</script>

 

<div id="drop">
   <p href="#" onmouseover="mopen('1')" onmouseout="mclosetime()">Choose date</p>
   <div id="1" onmouseover="mcancelclosetime()" onmouseout="mclosetime()">
		  <asp:Calendar ID="Calendar1" runat="server" BackColor="Red" ></asp:Calendar>
	</div>
</div>

Når lukket:

 

post-129024-1240303163.png

 

Når åpnet:

 

post-129024-1240303166.png

Endret av RePaC
Lenke til kommentar
Videoannonse
Annonse

Jeg tror ikke et javascript klarer å skille mellom de ulike stedene å klikke på kalenderen, så når jeg hadde et lignende tilfelle valgte jeg å legge kalenderen i et updatepanel å kjøre postbacks ved klikk på dag og ved endring av måned. På den måten kunne jeg styre synlighet, tekstfeltverdien, osv. backend.

 

Sikkert ikke den beste løsning om dette er noe alle brukere av nettsiden har tilgang på, men om det er snakk om et administrasjonsystem (CMS eller lignende) er det mer-enn-godt-nok.

Lenke til kommentar

Japp, UpdatePanel er en AJAX-komponent. Når man benytter ASP.net 3.5 flyter disse komponentene veldig sammen med de vanlige, og bruken av de går lekende lett : )

 

Har lest litt om at slike partial-page-postbacks ved hjelp av updatepanels genereren en hel haug med data ved hver postback, slik at belastningen på serveren etterhvert kan blir stor. Det er derfor jeg nevnte dette med bruken: man skal være forsiktig med å bruke updatepanels på deler av nettsiden hvor det er stor trafikk. Dette er jo ikke tilfelle ved administrasjonssystemer eller andre type nettapplikasjoner hvor kun en utvalgt gruppe har tilgang til nettsiden.

 

Edit: dobbelt-opp-med-ord : )

Endret av Rymored
Lenke til kommentar

Har prøvd å sette inn AJAX komponenter først, fordi jeg tenkte dette er den letteste måten, men får typisk PreFix feilmelding:

 

"This control cannot be displayed because its TagPrefix is not registered in this Web Form."

 

Derfor registrerte jeg:

 

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="id" %>

men den vil fortsatt ikke bruke controllen.

Endret av RePaC
Lenke til kommentar

Det er ikke nødvendig med en slik om du setter opp web.config-filen riktig. Legger ved et eksempel på en web.config-fil som blir automatisk generert i vs08 når man oppretter et nytt ASP.net 3.5-prosjekt. Når denne er på plass kan du benytte <asp:updatepanel> uten å tenke på noe ekstra registrering av assembly's på hver enkelt side.

 

(jeg har da antatt at du benytter .net 3.5 ettersom du ikke kommenterte noe rundt det)

 

Edit: husk forresten også at du trenger en <scriptmanager> på de sidene som benytter updatepanel's !

 

 

<?xml version="1.0"?>

<configuration>

<configSections>
  <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
	<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
	  <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
	  <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
		<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
		<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
		<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
		<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
	  </sectionGroup>
	</sectionGroup>
  </sectionGroup>
</configSections>  


<appSettings/>
<connectionStrings/>

<system.web>
	<!-- 
		Set compilation debug="true" to insert debugging 
		symbols into the compiled page. Because this 
		affects performance, set this value to true only 
		during development.
	-->
	<compilation debug="false">

	  <assemblies>
		<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
		<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
		<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
		<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
	  </assemblies>

	</compilation>
	<!--
		The <authentication> section enables configuration 
		of the security authentication mode used by 
		ASP.NET to identify an incoming user. 
	-->
	<authentication mode="Windows" />
	<!--
		The <customErrors> section enables configuration 
		of what to do if/when an unhandled error occurs 
		during the execution of a request. Specifically, 
		it enables developers to configure html error pages 
		to be displayed in place of a error stack trace.

	<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
		<error statusCode="403" redirect="NoAccess.htm" />
		<error statusCode="404" redirect="FileNotFound.htm" />
	</customErrors>
	-->

  <pages>
	<controls>
	  <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	  <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	</controls>
  </pages>

  <httpHandlers>
	<remove verb="*" path="*.asmx"/>
	<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
  </httpHandlers>
  <httpModules>
	<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </httpModules>

</system.web>

<system.codedom>
  <compilers>
	<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
			  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
	  <providerOption name="CompilerVersion" value="v3.5"/>
	  <providerOption name="WarnAsError" value="false"/>
	</compiler>
 </compilers>
</system.codedom>

<!-- 
	The system.webServer section is required for running ASP.NET AJAX under Internet
	Information Services 7.0.  It is not necessary for previous version of IIS.
-->
<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules>
	<remove name="ScriptModule" />
	<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </modules>
  <handlers>
	<remove name="WebServiceHandlerFactory-Integrated"/>
	<remove name="ScriptHandlerFactory" />
	<remove name="ScriptHandlerFactoryAppServices" />
	<remove name="ScriptResource" />
	<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
		 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
		 type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </handlers>
</system.webServer>

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
	<dependentAssembly>
	  <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
	  <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
	</dependentAssembly>
	<dependentAssembly>
	  <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
	  <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
	</dependentAssembly>
  </assemblyBinding>
</runtime>

</configuration>

Endret av Rymored
Lenke til kommentar

Da skal det i utgangspunktet være nok å sette inn en ScriptManager for å få ting til å fungere. For å forsikte deg om at problemet ikke ligger på din lokale maskin kan det lønne seg å laste siden opp mot en server som støtter .net 3.5 og teste ting der. Legger ved et enkelt eksempel nedenfor så du forstår hva jeg mener:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="test2._Default" %>

<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
	<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

	<asp:UpdatePanel ID="UpdatePanel1" runat="server">
		<ContentTemplate>
			<asp:TextBox runat="server" ID="TextBox1" />
			<asp:Button runat="server" ID="Button1" Text="Button" onclick="Button1_Click" />
		</ContentTemplate>
	</asp:UpdatePanel>
</div>
</form>
</body>
</html>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace test2
{
public partial class _Default : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		if (!Page.IsPostBack)
		{
			TextBox1.Text = DateTime.Now.ToString();
		}
	}

	protected void Button1_Click(object sender, EventArgs e)
	{
		TextBox1.Text = DateTime.Now.ToString();
	}
}
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...