.NET HtmlButton always triggers validators - html

I have created a server control out of the HtmlButton with validation disabled.
<button runat="server" causesvalidation="false" />
NOT the input button!!!
<input type="button" runat="server />
I have a bunch of validators on my form and when i click the HtmlButton they still run the validators. If I use the input button there is no problem and the validators don't run.
Is this expected behavior or is this a bug?

I tried it and it works as expected. I think you should check your code, maybe you're enabling it at server-side.
<button runat="server" ID="btnSubmit" causesvalidation="false"
onserverclick="SubmitButton_Click"></button>
Just to overcome the problem, you can add validation group to your validations.

You have no id on your button? That might be causing an issue where it doesn't know what the button is called therefore not loading all attributes for it. Long shot but you never know.

Depends on where the validations are used and if they are in the same group.you add validation restrictions on validation groups.if they are not in a group maybe the form's post to server causes it to validate the controls.

All you have to do is set the attribute type="button". The default must be submit.

Related

Is there a need to state type="submit" for a button when the button is used in a form?

I am new to programming please forgive me if my question is out of place or if it does not follow community guidelines.
I was following a youtube tutorial and this is the simplified code:
<form class="form" id="form">
<input type="text" id="input" autocomplete="off"/>
<button type="submit" class="btn">Submit</button>
</form>
My question is why is there a need to state type="submit" ? I tried removing the type and it seems to work fine.
Also, I saw another question on StackOverflow that states the default for button when it is used in a form is already submit.
Is the person in the tutorial just being thorough or is there another reason as to why it needs to be stated?
You don't need to because button's default type is submit.
But, you have to because your purpose is not writing something that "just works". You read code 90% of time and write code 10% of time, so readability is essential. (though there are some weird places where the purpose is exactly the opposite, but that's an edge case)
If the form is so large that you don't know if your submit button is inside the form or not, simply stating type="submit" will give you a clear idea that it's inside a form.
There are many more examples in coding that you simply write "unnecessary" code for documentation purpose, such as naming a function catchButterfly() instead of f().
In general, it's always a good practice to be VERY verbose and explicit about every piece of code you write because it's just a few extra lines of code but the advantage is HUGE.
<button type="submit"> and <button> are the same thing.
The reason is the default type of a button is submit.
So you can leave it off if you want. If you do not want the button to submit the form, then you want to use type="button".
It is explained in the docs on MDN or www.w3.org
It works fine when removed because submit is the default type :
https://html.spec.whatwg.org/multipage/form-elements.html#attr-button-type

Is there a way to identify whether a form is submitted in html, WITHOUT JAVASCRIPT?

I have a form with few fields, validated only in html.
I want to avoid users to click multiple times on the submit button.
Just want to block the button after submitting, so its blocked from second time.
Please let me know if i can achieve this just using HTML and CSS.
As others have said, this is not possible without JavaScript.
The most minimalist JavaScript scenario I could see to disable the button would be an inline onclick attribute on the button.
e.g:
<input type="submit" onclick="this.disabled = true;" value="Click Me">
This is not possible.
If you want to avoid client-side JS then, with server-side code, you could generate a unique identifier in a hidden input that you can use to check for duplicate submissions on the server.

how to bypass required field validation when clicking the cancel button?

I've used HTML input type for my textboxes to utilize the required attribute. now my dilemma is i cannot go out of the page without filling-up the fields with required attributes. Ive tried using causeValidation set to false but its not working. i can not change my textboxes to asp textboxes because it's going to be a large changes in the page. is there any other way to this?
<asp:Button runat="server" ID="buttonCancel" CssClass="cu-btn-direction" style="float:right; margin-right: 15px; margin-bottom: 60px;" Text="Cancel" CausesValidation="false" />
EDIT:
I tried adding validation group but didn't work... what works is setting the UseSubmitBehavior to false http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior%28v=vs.110%29.aspx but as explained in the link it will not work without js enabled. any other way?
use formnovalidate
<input type="submit" value="Cancel" formnovalidate>
this bypass all form validation like required

HTML Form submit buttons

I know, this might be a very basic question but I am not 100% sure on the topic.
When submitting forms, is there a precise value that needs to be passed in order to inform that a certain button was pressed...
or can any value be passed in relation to the submit button's name?
Any ideas?
Edit:
Thank guys! I found out how to deal with the problem.
As variables are passed to the servers and are pretty much open to interpretation, depending on how they are read by the server,
I just decided to check the data being posted on various forms and just decided to mimic them.
Everything works now, thanks for your help!
You could pass any value and you can check based on various possibilities whether form was submitted. For example, this is how we check in php whether or not form was submitted:
<input type="submit" name="submit" value="whatever" />
if (isset($_POST['submit']))
{
// form was submitted !!
}
You should pass the <input type="submit">'s value attribute.
For example, if the user clicks the following submit button, the browser must send GoNext=Next+Step
<input type="submit" name="GoNext" value="Next Step" />
For more information, read the specification

in JSF - How to rerender a component on button press. (The smart way?)

I have a simple HTMLCommandButton that I want to cause a rerender to another component.
I know of a simple way to do that - add an ajax support object and have it run on "onclick" event and rerender.
<h:commandButton value="Submit" action="#{actions.submitToDB}">
<a4j:support event="onclick" reRender="Button0" />
</h:commandButton>
I figured there has to be a smarter way to do this with the on* attributes of the HTML CommandButton but I'm not sure what to write to cause the rerender (Using this alleged method)
Thanks!
No, there isn't a smarter way in the common case. This is the way to do it. You will have to do the following
set type="button" on the button.
set the action on the <a4j:support> rather than on the button istself.
In this particular case (a button) a shortcut will be:
<a4j:commandButton value="Submit"
action="#{actions.submitToDB}" reRender="Button0" />