Laden...

String mit ' übergeben [CLOSE]

Erstellt von sakanoue vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.114 Views
S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren
String mit ' übergeben [CLOSE]

Hi,

ich möchte einem Html Element im C# Code ein Attribut hinzufügen welches im string ein ' besitzt.


protected void repeaterDays_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {

            string navfunc = @"navigate('"+this.var.ToString()+"')";

            HtmlControl navigate = (HtmlControl)e.Item.FindControl("LinkOfDay");
            navigate.Attributes.Add("onclick", navfunc.Normalize());
            counter++;
        }

im Quellcode zeigt er mir jedoch immer den ASCII Dez Code an:

&#39 var &#39

Wie kann ich das ändern? Ich dachte das mache ich schon durch das @ 😃

EDIT: Der Code hängt in einem Repeater. Deswegen auch e.Item.FindControl(). Wie ändere ich denn bei einem string das Encoding? Oder greife ich auf das Attribut zurück?

B
198 Beiträge seit 2005
vor 13 Jahren

Du musst wenn du den String in die Datei schreibst, dass Encoding richtig einstellen.

Post am besten den Code den du benutzt um den String in die Datei zu schreiben.

L
63 Beiträge seit 2008
vor 13 Jahren

Wie kann ich das ändern? Ich dachte das mache ich schon durch das @ 😃

Das verhindert nur das Wirken von Escapesequenzen.

S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren

Ok. Dein Link bringt mir jetzt aber nicht viel 😃

Bin aber immernoch nicht weiter damit. Encoding ist mir natürlich ein Begriff. Aber wie ich das in diesem Fall anwenden soll, weiß ich leider nicht.

J
537 Beiträge seit 2007
vor 13 Jahren

lass mal das ".Normalize()" weg

S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren

Das .Normalize() war nur zu Testzwecken. Hat aber leider auch nichts geholfen. Oh man so ein kleines Problem und ich verzweifel hier 😄

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

  1. wofür glaubst Du den Normalize()-Aufruf zu brauchen?
  2. Ich habe Deinen Code probiert und bei mir funktioniert er einwandfrei. Vielleicht zeigst Du mal, wie Dein ItemTemplate für den Repeater aussieht...

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren

ASP.Net Class


<asp:Repeater ID="repeaterDays" runat="server" OnItemDataBound="repeaterDays_ItemDataBound">
                    <ItemTemplate>
                        <li><a href="#" id="LinkOfDay" runat="server"><span class="day">
                            <asp:Label ID="labelDate" runat="server" /></span></a></li>
                    </ItemTemplate>
                </asp:Repeater>

CS Class


protected void repeaterDays_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            /* ... */

            string navfunc = "navigate('" + this.counter.ToString() + "')";
            HtmlControl navigate = (HtmlControl)e.Item.FindControl("LinkOfDay");
            navigate.Attributes.Add("onclick", navfunc);
            counter++;
        }

Im Quellcode steht nachher:


<li><a href="#" id="repeaterDays_ctl00_LinkOfDay" onclick="navigate(&.#39 0 &.#39)"><span class="day">
                            <span id="repeaterDays_ctl00_labelDate">8/30/2010</span></span></a></li>

Es sollte aber heißen:


<li><a href="#" id="repeaterDays_ctl00_LinkOfDay" onclick="navigate('0')"><span class="day">
                            <span id="repeaterDays_ctl00_labelDate">8/30/2010</span></span></a></li>

Das ändern des Metatags

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

in UTF-8, ISO-8859-1, oder so bringt auch nichts. Gibts doch nicht 😉

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo sakanoue,

ich kann Dein problem leider nicht reproduzieren.
Hier mein Testcode:

die .aspx

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>test</title>
</head>
<body>
<div>
    <form runat="server">
    <ul><asp:Repeater runat="server" ID="Repeater1">
          <ItemTemplate>
                <li><a id="LinkOfDay" runat="server"><%# DataBinder.Eval(Container.DataItem, "Name") %></a></li>
          </ItemTemplate>
    </asp:Repeater></ul>
    </form>
</div>
</body>
</html>

der CodeBehind:

public partial class _Default : System.Web.UI.Page 
{
  public class ValueObj 
  {
    public ValueObj(string val) { Name = val; }
    public string Name{ get; set; }
  }

  public List<ValueObj> myVals = new List<ValueObj>();
  int counter = 0;

  protected void Page_Load(object sender, EventArgs e) 
  {
    myVals.Add(new ValueObj("Item1"));
    myVals.Add(new ValueObj("Item2"));
    myVals.Add(new ValueObj("Item3"));
    Repeater1.DataSource = myVals;
    Repeater1.ItemDataBound += repeater1_ItemDataBound;
    DataBind();
  }
  protected void repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
  {

    string navfunc = @"navigate('" + counter.ToString() + "')";

    HtmlControl navigate = (HtmlControl)e.Item.FindControl("LinkOfDay");
    navigate.Attributes.Add("onclick", navfunc);
    counter++;
  }
}

Das liefert bei mir folgenden Output:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head><title>
	test
</title></head>
<body>
<div>
    <form name="ctl01" method="post" action="Default.aspx" id="ctl01">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEzNjYwMjA1MjRkZJcpsJBcPu04MicWB+sQzRzwkSdc" />
</div>
 
    <ul>
                <li><a id="Repeater1_ctl00_LinkOfDay" onclick="navigate('0')">Item1</a></li>
          
                <li><a id="Repeater1_ctl01_LinkOfDay" onclick="navigate('1')">Item2</a></li>
          
                <li><a id="Repeater1_ctl02_LinkOfDay" onclick="navigate('2')">Item3</a></li>
          </ul>
    </form>
</div>
</body>
</html>

Sieht alles OK aus. Das Problem muss noch woanders liegen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren

Ich habe zu Testzwecken noch einmal ein neues Projekt mit deinen Daten erstellt und es kommt wieder das Problem 😄

Seltsam.

Ich benutze VS2010 Prof. 4.0 Framework. in der Web.Config steht nichts besonderes drin. hmpf.

<!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><title>
 
</title></head>
<body>
    <div>
    <form method="post" action="WebForm1.aspx" id="Form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" />
</div>
 
    <ul>
                <li><a id="Repeater1_LinkOfDay_0" onclick="navigate(&.#39;0&.#39;)">Item1</a></li>
          
                <li><a id="Repeater1_LinkOfDay_1" onclick="navigate(&.#39;1&.#39;)">Item2</a></li>
          
                <li><a id="Repeater1_LinkOfDay_2" onclick="navigate(&.#39;2&.#39;)">Item3</a></li>
          </ul>
    </form>
</div>
</body>
</html>


den Punkt bei &.#39 weg denken. Weil er das hier im Forum automatisch in ' konvertiert 😃

S
sakanoue Themenstarter:in
46 Beiträge seit 2009
vor 13 Jahren

GELÖST. Lag nicht am Encoding. Der Code wurde richtig übergeben. Einen genauen Grund warum es vorher nicht geklappt hat, gibt es nicht.