webForumDet fria alternativet

Confirmruta i dropdownlist

.NET

6 svar · 266 visningar · startad av NETwork

Medlem sedan juni 20011 732 inlägg
Frågan#1
Medlem sedan jan. 2004501 inlägg
#2

Det känns inte som en bra lösningom man frågar mig. Så du får gärna förklara mer på vad du ska ha det till?

Medlem sedan juli 20011 304 inlägg
#3

Ta bort autopostback från dropdownrutan och gör det själv i javascript om användaren klickar på OK

Medlem sedan sep. 20011 914 inlägg
#4
//.aspx 
<asp:dropdownlist id="ddlTest" runat="server">
   <asp:listitem text="Ja" />
   <asp:listitem text="Nej" />
   <asp:listitem text="Vet ej" />
</asp:dropdownlist>

//.cs
private void Page_Load(object sender, System.EventArgs e)
{
   BindJavascript();
}

private void BindJavascript()
{
   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   sb.Append("<script language=\"javascript\">\r<!--\r");
   sb.Append("function __doSpecialPostBack(eventTarget, eventArgument) {\r");
   sb.Append("if(confirm(\"Är du säker?\")){\r");
   sb.Append("var theform;\r");
   sb.Append("if (window.navigator.appName.toLowerCase().indexOf(\"netscape\") > -1) {\r");
   sb.Append("theform = document.forms[\"_ctl0\"];\r}");
   sb.Append("else {theform = document._ctl0;}\r");
   sb.Append("theform.__EVENTTARGET.value = eventTarget.split(\"$\").join(\":\");\r");
   sb.Append("theform.__EVENTARGUMENT.value = eventArgument;\r");
   sb.Append("theform.submit();\r"); 
   sb.Append("}\r");
   sb.Append("}\r");
   sb.Append("// -->\r</script>");

   ddlTest.Attributes.Add("onchange", "__doSpecialPostBack('ddlTest','')");

   if(!this.IsClientScriptBlockRegistered("specialDropDownScript"))
   {
      this.RegisterClientScriptBlock("specialDropDownScript", sb.ToString());
      this.RegisterHiddenField("__EVENTTARGET", "");
      this.RegisterHiddenField("__EVENTARGUMENT", "");
   }
}

private void ddlTest_SelectedIndexChanged(object sender, System.EventArgs e)
{
   Response.Write(ddlTest.SelectedValue);
}
Medlem sedan juni 20011 732 inlägg
#5

Tack, ska försöka sätta mig in i koden lite senare (en massa annat kom emellan) .. ser komplicerat ut... Problemet är också att den ligger i en repeater. Det är tom två dropdownlistor som bör ha den här funktionen på varje rad, vet inte om jag lyckats tyda din kod rätt men fungerar detta på flera dropdownlistor?

Det känns inte som en bra lösningom man frågar mig. Så du får gärna förklara mer på vad du ska ha det till?

Platsbrist! Jag har en lista med två dropdownlistor där den ena används för att flytta den aktuella raden (eller divisionen för att tala klarspråk), den andra för att slå samman med en annan division. Nu har en knapp kopplad till respektive dropdownlist med ett confirm-script på knappen, men om jag kan få en confirm-ruta att samarbeta med en autopostback så kan jag ta bort knapparna och jag får bort två knappar som dels tar en massa plats, dels gör att sidan bara ser krångligare ut.

Att en confirm behövs kan jag garantera då det ska användas av 50-åriga damer inom vården. De behöver confirmrutor på ALLT! :) Varför är det en dålig idé menar du?

Medlem sedan sep. 20011 914 inlägg
#6

Omgjord för en Repeater. Otestad, men det funkar säkert. :)

//.aspx
<asp:repeater id="repTest" runat="server">
    <headertemplate>
        <table>
    </headertemplate>
    <itemtemplate>
        <tr>
            <td><asp:dropdownlist id="ddlGrr1" runat="server"></td>
            <td><asp:dropdownlist id="ddlGrr2" runat="server"></td>
        </tr>
    </itemtemplate>
    <footertemplate>
        </table>
    </footertemplate>
</asp:repeater>

//.cs
private void Page_Load(object sender, System.EventArgs e)
{
   BindJavascript();
}

private void BindJavascript()
{
   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   sb.Append("<script language=\"javascript\">\r<!--\r");
   sb.Append("function __doSpecialPostBack(eventTarget, eventArgument) {\r");
   sb.Append("if(confirm(\"Är du säker?\")){\r");
   sb.Append("var theform;\r");
   sb.Append("if (window.navigator.appName.toLowerCase().indexOf(\"netscape\") > -1) {\r");
   sb.Append("theform = document.forms[\"_ctl0\"];\r}");
   sb.Append("else {theform = document._ctl0;}\r");
   sb.Append("theform.__EVENTTARGET.value = eventTarget.split(\"$\").join(\":\");\r");
   sb.Append("theform.__EVENTARGUMENT.value = eventArgument;\r");
   sb.Append("theform.submit();\r"); 
   sb.Append("}\r");
   sb.Append("}\r");
   sb.Append("// -->\r</script>");

   if(!this.IsClientScriptBlockRegistered("specialDropDownScript"))
   {
      this.RegisterClientScriptBlock("specialDropDownScript", sb.ToString());
      this.RegisterHiddenField("__EVENTTARGET", "");
      this.RegisterHiddenField("__EVENTARGUMENT", "");
   }
}

private void repTest_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   {
      DropDownList ddl1 = (DropDownList)e.Item.FindControl("ddlGrr1");
      DropDownList ddl2 = (DropDownList)e.Item.FindControl("ddlGrr2");

      //Code to fill dropdowns with data

      ddl1.Attributes.Add("onchange", "__doSpecialPostBack('" + ddl1.ID + "', '')");
      ddl2.Attributes.Add("onchange", "__doSpecialPostBack('" + ddl2.ID + "', '')");
   }
}
Medlem sedan jan. 2004501 inlägg
#7

Anledningen jag inte tycker att det hela är en bra ide är att du, som jag uppfattar det, skickar/ändrar data när man har ändrat i listboxen. Vilket enligt min mening inte är så bra användar mässigt. Då är det bättre att tex dela upp det i flera steg och sedan har en knapp som avslutar det hela.

Men jag kan fått det hela lite om bakfoten. Men jag tycker inte att något ska hända när man väljer i en dropdown mer än att kanske en till dropdown eller fält ska dyka upp.

Hoppas du förstår vad jag menar.

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)