transfer values from clientside script to serverside
Jeg har et javascript som akkumulere data i en tekststreng. Når jeg submitter, skal den endelige streng anvendes serverside sammen med flere andre informationer.Hvis jeg smider en alert(EditString), vises den akkumulerede tekst fint, men når jeg tilgår den via dens id, er strengen tom.
Scriptet gør en listbox editable, og for hver karakter der indtastes i det pågældende listitem, gemmes strengen i 'EditString'
'describtions.js'
var PreviousSelectIndex = 0;
var SelectIndex = 0;
var SelectChange = 'MANUAL_CLICK';
function fnChangeHandler()
{
var EditElement = document.getElementById('ctl03_editableList');
var size = EditElement.length;
PreviousSelectIndex = SelectIndex;
SelectIndex = EditElement.options.selectedIndex;
if ((PreviousSelectIndex == (size - 1)) && (SelectIndex != (size - 1))&&(SelectChange != 'MANUAL_CLICK'))
{
EditElement[(size - 1)].selected=true;
PreviousSelectIndex = SelectIndex;
SelectIndex = EditElement.options.selectedIndex;
SelectChange = 'MANUAL_CLICK';
}
}
function fnKeyDownHandler()
{
var key = window.event.keyCode;
if(key == 8 || key==127)
{
key = '';
return true;
}
key = '';
return true;
}
function fnKeyPressHandler()
{
var EditElement = document.getElementById('ctl03_editableList');
var size = EditElement.length;
var key = window.event.keyCode;
if(size != 0)
if (EditElement.options.selectedIndex == 0)
{
var EditString = EditMe.innerText;
if (EditString == "?")
{
EditString = "";
}
if ((key==8 || key==127))
{
EditString = EditString.substring(0,EditString.length-1);
SelectChange = 'MANUAL_CLICK';
}
if ((key==46) || (key>39 && key<59)||(key>62 && key<127) ||(key==32))
{
EditString+=String.fromCharCode(key);
var i=0;
var EnteredChar = String.fromCharCode(key);
var UpperCaseEnteredChar = EnteredChar;
var LowerCaseEnteredChar = EnteredChar;
if(((key)>=97)&&((key)<=122))
UpperCaseEnteredChar = String.fromCharCode(key - 32);
if(((key)>=65)&&((key)<=90))
LowerCaseEnteredChar = String.fromCharCode(key + 32);
for (i=0;i<(size-1);i++)
{ var ReadOnlyString = EditElement[i].innerText;
var FirstChar = ReadOnlyString.substring(0,1);
if((FirstChar == UpperCaseEnteredChar)||(FirstChar == LowerCaseEnteredChar))
{
SelectChange = 'AUTO_SYSTEM';
break;
}
else
{
SelectChange = 'MANUAL_CLICK';
}
}
}
EditMe.innerText = EditString;
EditMe.value = EditString;
return true;
}
return true;
}
TestSite.aspx.cs
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;
using System.Text;
public partial class TestSite : System.Web.UI.Page
{
protected void Page_Load(object sender , EventArgs e)
{
ListItem editMe;
editMe = new ListItem("?");
editMe.Attributes["id"] = "EditMe";
editMe.Attributes["runat"] = "server";
ctl03_editableList.Items.Add(editMe);
ctl03_editableList.Items.Add("Test 1");
ctl03_editableList.Items.Add("Test 2");
ctl03_editableList.Items.Add("Test 3");
Session["editme"] = editMe;
editMe = (ListItem) Session["editme"];
}
protected void btn_Click(object sender , EventArgs e)
{
StringBuilder bob = new StringBuilder();
bob.Append("\n");
bob.Append("selected index: ");
bob.Append(ctl03_editableList.SelectedIndex);
bob.Append("\n");
bob.Append("selected index[0]: ");
bob.Append(ctl03_editableList.Items[0].Selected);
bob.Append("\n");
bob.Append("attributes count: ");
bob.Append(EditMe.Attributes.Count);
bob.Append("\n");
bob.Append("EditMe text: ");
bob.Append(EditMe.Attributes["EditMe"]);
txt.Text = bob.ToString();
}
}
'TestSite.aspx'
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestSite.aspx.cs" Inherits="TestSite" Trace="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head runat="server">
<title>Untitled Page</title>
<script language="javascript" src="describtions.js"></script>
</head>
<body>
<form name="frmName" method="post">
<select name="ctl03_editableList" id="ctl03_editableList" runat="server" enableviewstate="true" onkeydown="fnKeyDownHandler()" onkeyup="return false" onkeypress="fnKeyPressHandler()" onchange="fnChangeHandler()">
</select>
</form>
<form id="Form1" runat="server">
<br />
<asp:Button ID="btn" runat="server" OnClick="btn_Click" Text="Button" />
<br />
<asp:TextBox ID="txt" runat="server" Height="243px" TextMode="MultiLine" Width="906px"></asp:TextBox>
</form>
<span id="Message" enableviewstate="false" runat="server" />
</body>
</html>
Hva hunde gør jeg galt?? Når jeg afvikler sitet, får jeg følgende udskrift uanset hvilket listitem der er valgt:
selected index: 0
selected index[0]: True
attributes count: 1
EditMe text:
Hjælp, jeg er ved at op i limningen... der er garanteret en simpel forklaring, men jeg kan ikke se den!!!
