Preventing a button from responding to 'Enter' in ASP.net - c#

I have a master template that all the pages on my site use. In the template there is an empty panel. In the code-behind for the page an imagebutton is created in the panel dynamically in my Page_Load section (makes a call to the DB to determine which button should appear via my controller).
On some pages that use this template and have forms on them, pressing the Enter key fires the click event on this imagebutton rather than the submit button in the form. Is there a simple way to prevent the imagebutton click event from firing unless it's clicked by the mouse? I'm thinking a javascript method is a hack, especially since the button doesn't even exist in the master template until the button is dynamically created on Page_Load (this is ugly since I can't simply do <% =btnName.ClientId %> to refer to the button's name in my aspx page).
I tried setting a super-high tabindex for the image button and that did nothing. Also set the button to be the DefaultButton in its panel on the master template but that did not work either. Moreover, I don't want to add a property to all of my pages that use this template (there are hundreds). It would be optimal to find a solution that works globally from my master template.
I'll try to show our example here:
We have a button on the top of each page in our system that lets you star the page as one of your favorites, sort of a server-side bookmark system. When the page loads it looks to see if the page is one of your favorites or not and then shows a gold star if it is, and a gray star if it is not. Clicking the imagebutton of a star toggles the page favorite status.
In my master template (FullMenu.master) I have this panel
<asp:Panel runat="server" ID="pnlFavorite" style="display:inline;"></asp:Panel>
Next there is a class which creates the button and adds it to the panel on the master template:
public void InsertStarButton()
{
CreateStarButton();
pnl.Controls.Add(bright);
}
and
private void CreateStarButton()
{
bright = new ImageButton();
bright.ImageUrl = "~/resources/images/star.png";
bright.Height = new Unit(12, UnitType.Pixel);
bright.ID = "btnStar";
}
What I tried earlier, that didn't work, was in InsertStarButton() I added a line pnl.DefaultButton = "btnStar" but that didn't change anything on the page. Even if I had the cursor blinking inside a text box in the form on the page the star button would fire its click event if the Enter key was pressed.

http://weblogs.asp.net/scottgu/archive/2005/08/04/421647.aspx

Pressing ENTER on a single-line textbox on a form will submit the form. That's how it works.

Related

Tab Stop not working for the section Tab page in Tab control C# Winforms

I have a C# application where I am using Tab Control with two Tab Pages. I have a button on first Tab Page and on buttonclick, I remove the first Tab Page and display the second Tab Page. My problem is when I get on the second Tab Page, my control gets stuck on the Tab Page Text instead of the textbox inside the tab. I have set the Tab Stop property of the Tab Control to False, and it is working fine for the first Tab Page but not for second Tab Page. I have also set the Tab Index property correctly.
Please help me find the issue here.
Code for hiding Tab Pages:
btnAppend.Click += delegate
{
AppendEvent?.Invoke(this, EventArgs.Empty);
tbcntrl1.TabPages.Remove(tbpglist);
tbcntrl1.TabPages.Add(tbpgform);
tbpgform.Text = "Append";
tbcntrl1.TabStop = false;
};
I am attaching a few screenshots for reference.
First Tab page where control on landing on append button
Second tab page where it should have been on Textbox of Name.
Edit:
This line in the btnAppend.Click code worked for some reason, but still doesn't explain why Tab Stop = false is not working:
this.SelectNextControl(tbcntrl1, true, true, true, true);

Control default action in ASP on Enter

This may be an easy question for you guys.
I have a web form with several buttons and only one textbox. When I enter a value in the textbox and press enter the method gets executed that is wired to the first top left button. I need to control what button's method gets executed (in this case it is a button in a whole different location that does db query).
I tried to alter tab index to have my desired button the lowest and I tried to pass focus to my desired button on page_load (like I would have done in Win Forms) but still if I enter text in textbox and hit eneter, the top left button's method gets executed.
I could put conditions in execution of top left button's method but that would be a workaround not a solution. So how do I control that behavior?
ASP.NET form has a defaultbutton property that specifies which button is clicked when ENTER is pressed. Just specify your button ID there. E.g.
<form id="form1" runat="server" defaultbutton="MyDbQueryButton">

popup window according to CheckBox checked

If user don't checked, I want to show asp:ModalPopupExtender and get numeric value from this form.
I'm using asp.net wizard control. I don't know "finish" button id. Can somebody help me?
You should set the target of the ModalPopupExtender as a dummy control, i.e., a hidden Button, LinkButton,... that never is going to be clicked by the user.
The Wizard control have a method called FinishButtonClick. Here is where you have to check the state of the CheckBox and show or not the popup calling to the method Show() of the ModalPopupExtender. You also can call to the Click() method of the hidden control or do it with JavaScript usign the BehaviourID of the ModalPopupExtender. Your choice.
Cheers!
To get "Finish" button id, just open the page in browser & view the rendered html code (Right Click -> View Source). From their you can get the finish button id.
And after getting "Finish" button id, you can easily associate a Client-Side event to do the required job.

How to generate buttons dynamically

I have one table with some records. My table like this
WFID clientID WorkflowName workflowsteps completedstep
12 15 print cutting,printing,lamination -
Workflowsteps will vary depending upon the workflow name.
In completedstep column it will show the completed steps. For example: if cutting and printing is done then it will show cutting,printing
Now I want to create dynamic buttons with the name cutting, printing, lamination
All the button will be disable by default only first button will be enable and clickable if I press first button "cutting" then its color should changed to red and The next "printing" button will be enable. Same process will repeat for each dynamic button.
How to do this in ASP.net?
:)
Put cutting button inside completedstep column.Do your code in gridviewrowcreated event, and enable only first button.Keep a printing button their also after cutting button make it visible false.Create a cuttingbuttonclick event handler method to handle visibility of printing button.
For dynamic button place a panel or placeholder inside grid.Then create button from codebehind and add it to the panel or placeholder.
Put this code inside gridviewrowcreated event.
Panel panel1=(Panel)e.Row.FindControl("PanelinsideGrid");
Button dynbtn = new Button();
dynbtn.Text = "Button Name";
panel1.Controls.Add(dynbtn)

Load Multiple UpdatePanel Controls With JavaScript Button Clicks

I have 3 update panels on a page. Each of them is set to conditionally update. In each update panel I have a single button control that when clicked will populate the panel with data. Each panel is independent of one another.
Everything is working fine when you manually click each one of the 3 buttons in their respective panel. The issue I am having comes up when I use JavaScript to click the buttons. I have success when executing a single JavaScript call but when I try to click all 3 buttons with JavaScript, things behave sporadically. Depending on where I place the JavaScript calls in my code, different panels work and the others do not.
For example:
__doPostBack('btnBindTeamTicketList', '');
__doPostBack('btnBindPriorityList', '');
__doPostBack('btnSearchTemplate', '');
will show the panel that holds the 'btnSearchTemplate' button, but not the others. Different results occur when I change the sequence around.
Is there a way to click my 3 independent buttons (each in its respective panel) using JavaScript so that each panel will load as if I were clicking on them individually? I am guessing this has to do with the AJAX somehow conflicting with each other or a timing problem. Anyone point me in the right direction?
I am using ASP.NET 3.5/C#
I think you should do one postback. Put a hidden update panel in your page and put a button inside this new update panel. This button should call events
btnBindTeamTicketList_Click(null, null)
btnBindPriorityList_Click(null, null)
btnSearchTemplate_Click(null, null)
and should update the other update panels like upTeamTicketList.Update(). Now try clicking this new button.

Categories

Resources