Prova det här. Tror att det ska vara ' itället för "
<INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>'>
13 svar · 511 visningar · startad av GrodanBoll
Hej igen
Har jar lite problem med när jag ska lägga in ett värde i en inputbox.
Jag får detta felmeddelande: The server tag is not well formed.
<INPUT type="hidden" id="frmHidden" runat="server" value="<%# DataBinder.Eval(Container.DataItem, "textId") %>">
Jag har deklarerat den i code behind-filen men raden:
protected System.Web.UI.HtmlControls.HtmlInputHidden frmHidden;
Vad gör jag för fel?
/Grodan
Prova det här. Tror att det ska vara ' itället för "
<INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>'>
<INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>' />
Ger felmeddelandet: CS0117: 'System.Web.UI.Control' does not contain a definition for 'DataItem'
Men jag har som sagt ovan deklarerat den i code behind-filen. :l
Hur fyller du den? Visa lite kod.
Ok, ska göra när jag kommer hem. :)
Såja nu e man hemma. Här kommer koden:
(All kod finns med eftersom jag inte vet vad ni vill titta efter.)
.aspx
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="aspTest.trean._Default" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Default</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body>
<div id="Ett" runat="server" Visible="True">
<table>
<asp:repeater id="rptEtt" runat="server">
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container.DataItem, "membFirstname") %>
</td>
<td>
<%# DataBinder.Eval(Container.DataItem, "membLastname") %>
</td>
<td>
<asp:HyperLink id="lnkEtt" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "membId", "default.aspx?m={0}") %>' Runat="server" Target="_self" Text="Link" />
</td>
</tr>
</ItemTemplate>
</asp:repeater>
</table>
</div>
<div id="divTva" runat="server" Visible="False">
<div id="Namn2" runat="server" />
<br>
<br>
<table>
<asp:repeater id="rptTva" runat="server">
<ItemTemplate>
<tr>
<td>
<%# DataBinder.Eval(Container.DataItem, "textId") %>
<asp:HyperLink id="Hyperlink1" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "textId", "default.aspx?e={0}") %>' Runat="server" Target="_self" Text="Editera mig mera... ->" />
</td>
</tr>
<tr>
<td>
<%# DataBinder.Eval(Container.DataItem, "textText") %>
</td>
</tr>
<tr>
<td>
<hr>
</td>
</tr>
</ItemTemplate>
</asp:repeater>
</table>
</div>
<div id="divTre" runat="server" Visible="False">
<form id="Form1" method="post" runat="server">
<div id="Namn" runat="server" />
<br>
<INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>' />
<TEXTAREA rows="5" cols="20" id="frmTextarea"><%# DataBinder.Eval(Container.DataItem, "textText") %></TEXTAREA>
<INPUT type="submit" value="Submit" id="frmSubmit">
</form>
</div>
</body>
</HTML>
.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace aspTest.trean
{
/// <summary>
/// Summary description for _Default.
/// </summary>
public class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater rptEtt;
protected System.Web.UI.WebControls.Repeater rptTva;
protected System.Web.UI.HtmlControls.HtmlGenericControl Ett;
protected System.Web.UI.HtmlControls.HtmlGenericControl divTva;
protected System.Web.UI.HtmlControls.HtmlGenericControl divTre;
protected System.Web.UI.HtmlControls.HtmlGenericControl Namn;
protected System.Web.UI.HtmlControls.HtmlGenericControl Namn2;
protected System.Web.UI.HtmlControls.HtmlInputHidden frmHidden;
protected System.Web.UI.HtmlControls.HtmlTextArea frmTextarea;
protected System.Web.UI.HtmlControls.HtmlInputButton frmSubmit;
private void Page_Load(object sender, System.EventArgs e)
{
if ((Request.QueryString["m"] == null) || (Request.QueryString["e"] == null))
{
PlockaFramFranDb();
Ett.Visible = true;
divTva.Visible = false;
divTre.Visible = false;
}
else//Visa texterna istället för den personen
{
PlockaFramText();
Ett.Visible = false;
if (Request.QueryString["m"] != null)
{
divTva.Visible = true;
divTre.Visible = false;
}
if (Request.QueryString["e"] != null)
{
divTva.Visible = false;
divTre.Visible = true;
}
}
}
private void PlockaFramFranDb()
{
SqlConnection myConn;
SqlCommand myComm;
SqlDataReader myDR;
myConn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=tmp;Data Source=ANTEVANTE\\MINMSDE;");
myComm = new SqlCommand("SELECT membId, membFirstname, membLastname FROM tblMembers", myConn);
myConn.Open();
myDR = myComm.ExecuteReader();
rptEtt.DataSource = myDR;
rptEtt.DataBind();
myDR.Close();
myConn.Close();
}
private void PlockaFramText()
{
SqlConnection myConn;
SqlCommand myComm;
SqlDataReader myDR;
myConn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=tmp;Data Source=ANTEVANTE\\MINMSDE;");
myComm = new SqlCommand("SELECT membFirstname, membLastname FROM tblMembers WHERE membId = " + Request.QueryString["m"], myConn);
myConn.Open();
myDR = myComm.ExecuteReader();
while(myDR.Read())
{
if (Request.QueryString["m"] != null)
{
Namn.InnerHtml = myDR["membFirstname"].ToString() + " " + myDR["membLastname"].ToString();
}
if (Request.QueryString["e"] != null)
{
Namn2.InnerHtml = myDR["membFirstname"].ToString() + " " + myDR["membLastname"].ToString();
}
}
myDR.Close();
myConn.Close();
SqlCommand myComm2;
SqlDataReader myDR2;
myComm2 = new SqlCommand("SELECT textId, textText FROM tblText WHERE membId = " + Request.QueryString["m"], myConn);
myConn.Open();
myDR2 = myComm2.ExecuteReader();
rptTva.DataSource = myDR2;
rptTva.DataBind();
myDR2.Close();
myConn.Close();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Hoppas ni hittar felet. :)
/Grodan
Först och främst måste form-taggen omsluta ALLA dina kontroller. Jag lägger alltid formtaggen direkt under <html> och avslutar den direkt innan </html> oavsett hur sidan ser ut.
<%# DataBinder.Eval(Container.DataItem, "textText") %>
Detta använder du för att rulla ut en collection av något slag, exempelvis i en repeater. Du kan inte göra som du har gjort här. Om du ska plocka ut data ur din databas och fylla enskilda kontroller med dessa data kan du istället lägga dina hämtade data i en datatable. Sedan fyller du kontrollen i koden:
istället för
<INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>' />
använder du
<asp:TextBox id="myTB" style="visibility:hidden" runat=Server" />
och i koden
myTB.Text = datatable.Rows[rad][kolumn].ToString();
Red: Nu har jag inte satt mig in så noga i din kod, men om du vill gömma data på en sida så behöver du inte skapa osynliga textboxar eller liknande. asp.net har något som kallas viewstate, det är helt enkelt kod som skickas med tillsammans med sidan till klienten. Denna innehåller sådant som sidan använder sig av när den postas tillbaka till servern (se det som en session fast den ligger inbakad på sidan hos klienten istället). Här kan du själv lägga data och använda över postbacks.
ViewState["minadata"] = "detta vill jag spara";
:)
- Först och främst måste form-taggen omsluta ALLA dina kontroller. Jag lägger alltid formtaggen direkt under <html> och avslutar den direkt innan </html> oavsett hur sidan ser ut.
Är det inte bättre att lägga <form>-taggen innanför <body>-taggarna - så att det går att validera sidan som HTML?
Ah, sorry, jag menar NATURLIGTVIS body-taggarna, ingenting annat!!!
<body>
<form runat="server">
</form>
</body>
:r
NETwork skrev:
- Först och främst måste form-taggen omsluta ALLA dina kontroller.
Du kan sätta tex nedan oxå
<body id="bTest" runat="server">
protected HtmlGenericControl bTest;
private void Page_Load(object sender, System.EventArgs e)
{
bTest.Attributes["onload"] = "alert('Detta funkar oxå')";
...
NETwork skrev:
istället för <INPUT type="hidden" id="frmHidden" runat="server" value='<%# DataBinder.Eval(Container.DataItem, "textId") %>' /> använder du <asp:TextBox id="myTB" style="visibility:hidden" runat=Server" /> och i koden myTB.Text = datatable.Rows[rad][kolumn].ToString();
Nu har jag fått det att fungera. Men jag har ännu en fråga å detta temat.
I ditt exempel ovan så fyller du labeln m.h.a. datatable, tar inte den upp onödigt med minne? E det inte snabbare att fylla den m.h.a. en datareader?
Tänker jag helt fel?
Det är lite snabbare med en datareader, ja. Självklart kan du använda en datareader också men eftersom du ska sätta enskilda värden på flera ställen så tycker jag en datatable är ett smidigt sätt att lösa det på. Prestandaskillnaden är försumbar.