I'm working on an ASP.NET web application. Where I have added an ascx controller with an asp:updatepanel inside. The problem is now that when try to make an update it gives the following error:
MicrosoftAjax.js:5 POST http://localhost:49735/ 500 (Internal Server Error)
executeRequest # MicrosoftAjax.js:5
executeRequest # MicrosoftAjax.js:5
invoke # MicrosoftAjax.js:5
_onFormSubmit # MicrosoftAjaxWebForms.js:5
(anonymous function) # MicrosoftAjax.js:5
b # MicrosoftAjax.js:5
my ascx file looks like this:
<%# Control Language="C#" AutoEventWireup="true" CodeBehind="SearchResults.ascx.cs" Inherits="CarParts24.Controls.Search.Results.SearchResults" %>
<asp:UpdatePanel ID="UpdPnlSearchResults" runat="server">
<ContentTemplate>
<span id="search-result-json" class="hidden">
<asp:HiddenField ID="hiddenSearchResults" runat="server" />
</span>
<%--<asp:Panel ID="PanelResult" runat="server">--%>
<%-- Some ordinary HTML code --%>
<%--</asp:Panel>--%>
</ContentTemplate>
</asp:UpdatePanel>
and the codebehind:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CarParts24.Controls.Search.Results
{
public partial class SearchResults : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
PanelResult.Visible = false;
}
public void ShowResults(DataTable datatable)
{
hiddenSearchResults.Value = JsonConvert.SerializeObject(datatable);
PanelResult.Visible = true;
}
}
}
I found the problem, it was due to the <asp:HiddenField ID="hiddenSearchResults" runat="server" /> doing a postback when updating. changing it to a <asp:Literal ID="hiddenSearchResults" runat="server" /> fixed the problem
Related
I'm trying to call a function to change the contents of a <p> tag, it appears that my function is not being called, thanks in advance.
I've checked that all the tags have runat="server", and making sure the function name is correct.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace StepFollowingDemo
{
public partial class Test1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
void Yeah()
{
string Some = Something.Value;
this.Result.InnerHtml = Some;
}
}
}
}
<%# Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Test1.aspx.cs" Inherits="StepFollowingDemo.Test1" %>
Test Case
<label runat="server" for="Something">Type:</label>
<input runat="server" type="Text" class="from-control" id="Something"/>
<button runat="server" type="button" onclick="Yeah();" class="btn btn-success">Project your words</button>
<br /><br />
<label runat="server" for="Result">Output: </label>
<p runat="server" id="Result"></p>
I assume you want to run that code server-side. I see two problems:
You will need to use an ASP Button control, like <asp:Button>. Look at that documentation for details about how to use it. The <button> tag is not an ASP control, so that onclick is running client-side. It is looking for a javascript function.
You declared that method inside Page_Load and with the wrong signature for an event. Move it out of Page_Load, under the class:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Yeah(object sender, CommandEventArgs e)
{
string Some = Something.Value;
this.Result.InnerHtml = Some;
}
Also, Yeah isn't the usual naming convention, but it would still work.
i want to show a value in DropDownList at page load and the value is "1 Year".
here is my Database Table
id instal
0 Choose
6 6 Month
12 1 Year
24 2 Year
36 3 Year
here is my ASPX code:
<%# Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource1" DataTextField="instal" DataValueField="id"
onselectedindexchanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:paconn %>"
SelectCommand="SELECT * FROM [cms_instal] ORDER BY [id]">
</asp:SqlDataSource>
</asp:Content>
and its my C# code:
using System;
using System.Data;
using System.Configuration;
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.Data.Sql;
using System.Data.SqlClient;
using System.Collections;
using System.Web.SessionState;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.Text = "1 Year";
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
but problem is that when my page is loaded it gives an error
"'DropDownList1' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value"
i am using ASP.Net C#, SQL Server 2008.
The text property of a DropDownList gets or sets the SelectedValue. Since your DataValueField is set to "id", you would need to set the Text property to "12".
Move the text to the LoadComplete event
void Page_LoadComplete(object sender, EventArgs e)
{
DropDownList1.Text = "1 Year";
}
The list binding has not occurred in page load so the list is not able to take another value which is not in the list. Setting the value after page load will allow it to use an existing value.
I have peice of code in ASP.Net for execute code of C# using roslyn compiler. However, I use ASP.Net web forms to build user interface for execute the code. So,I want to take code from one textbox and by "Compile" button I show the result in another textbox.
So, I have this controls:
<%# Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>Compiler Tool</h1>
</hgroup>
<p>
You can compile your source code of C# using Roslyn Compiler from Microsoft</p>
<br/>
<p>
<asp:TextBox ID="TextBox3" runat="server" Height="185px" Width="480px" OnTextChanged="TextBox3_TextChanged"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button2" runat="server" onclick="Button_Click" Text="Compile" ForeColor="Black" />
</p>
<p>
<asp:TextBox ID="TextBox2" runat="server" Height="138px" Width="390px" ></asp:TextBox>
</p>
</div>
</section>
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
</asp:Content>
And here the Handler event for it using C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;
namespace WebApplication2
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
var engine = new ScriptEngine();
var session = engine.CreateSession();
String code = TextBox3.Text;
session.Execute(code);
}
protected void TextBox3_TextChanged(object sender, EventArgs e)
{
}
}
}
How could I show the result of execution of Code (TextBox3) in TextBox2??
Iam beginner in ASP.Net environment, Any help??
I'm afraid I'm not near a dev pc, so I can't test the code, but here's what comes to mind:
You're not using the result of session.Execute(code);, so if a user were to put in 3+3, it would get executed, and the return value would be 6, but since it's not captured, it simply would go out of scope. If instead, you did object result = session.Execute(code);, the output would be the integer 6; You could then call .ToString() on result and put that in your text box.
And of course be careful allowing users to execute arbitrary code on your webserver...
I have this project where I want to transfer data from textbox1 with session "sam" on the about.aspx on its label. The problem is that when I input a number, it is not shown on label. My problem is that I type something on the "Αριθμός Επιβατών:" textbox (a number for example) and after that I click submit I need to get the number on the about page next to "Ari8mos epivatwn :"
Defaultaspxcs.txt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication4
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click2(object sender, EventArgs e)
{
string txt = TextBox1.Text;
Session["sam"] = txt;
}
}
}
Aboutaspxcs.txt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication4
{
public partial class About : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = (string)Session["sam"];
}
}
}
Aboutaspx.txt:
<%# Page Title="About Us" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="About.aspx.cs" Inherits="WebApplication4.About" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<p>
Ari8mos epivatwn :
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</p>
</asp:Content>
https://www.dropbox.com/sh/4ftlddfhqo8n99p/gm-TNvol0S
It's likely that the content for the Label is being written twice, and not in the order your expect.
Start by familiarizing yourself with the asp.net page life-cycle
You will notice that PageLoad is called long before Render.
So, the page loads like this:
PageLoad Label text set to some number from your code
A bunch of other stuff
Render sets the Label text to "Label" instead, since that is what you have defined in your chtml.
Review this part of your code:
...
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
...
Try this instead:
...
<asp:Label ID="Label1" runat="server"></asp:Label>
...
I have a number of pages that I need to Dynamically Load User Controls and process events on controls on them. I have included sample code below for a trivial example.
Default.aspx
<%# Page Language="C#" AutoEventWireup="true" 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 xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="BtnLoadControl" runat="server" Text="Load Control 1"
onclick="BtnLoadControl_Click" /><br />
<asp:Button ID="BntLoadControl2" runat="server" Text="Load Control 2"
onclick="BntLoadControl2_Click" />
<asp:PlaceHolder ID="ControlArea" runat="server" />
</div>
</form>
</body>
</html>
Deafualt.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnLoadControl_Click(object sender, EventArgs e)
{
Control controlToAdd = Page.LoadControl("~/control1.ascx");
this.ControlArea.Controls.Add(controlToAdd);
}
protected void BntLoadControl2_Click(object sender, EventArgs e)
{
Control controlToAdd = Page.LoadControl("~/control2.ascx");
this.ControlArea.Controls.Add(controlToAdd);
}
}
Control1.ascx
<%# Control Language="C#" AutoEventWireup="true" CodeFile="control1.ascx.cs" Inherits="control1" %>
<div style="border: 1px solid red;">Test Control
<br /><asp:Button runat="server" ID="testButton" Text="test" onclick="testButton_Click" /></div>
Control1.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class control1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void testButton_Click(object sender, EventArgs e)
{
Response.Write("Button Clicked on Control 1!");
}
}
Control2.ascx
<%# Control Language="C#" AutoEventWireup="true" CodeFile="Control2.ascx.cs" Inherits="Control2" %>
<div style="border: 1px solid red;">Test Control 2
<br /><asp:Button runat="server" ID="testButton2" Text="test me"
onclick="testButton2_Click" /></div>
Control2.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Control2 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void testButton2_Click(object sender, EventArgs e)
{
Response.Write("Button Clicked on Control 2!");
}
}
This is a very trivial example to show what I would like to do. My actual control is more complex and has several properties that I set for the control I load as I load it (in the default.aspx.cs files event handler).
With this example what happens is when the button is clicked on one of the loaded controls, the page is re-loaded and the control is no longer there. How can I keep the control loaded as well as process any events that happen on the control?
You're asking if you can keep the control loaded in the page?
You can't keep the control loaded in the page, because the page doesn't exist! It's recreated on every request. It's created from the markup (compiled or not), and from running any code in the CodeBehind. If you want your controls to be there after a PostBack, then you need to recreate them on the PostBack. If you want to process events on those controls, then you'll have to wire the controls to event handlers when you recreate them after PostBack. Then the events will fire.