how to validate a textbox length in vb.net? - vb.net

In VB.NET , I am trying to validate a
<asp:textbox id="name" runat=server> </asp:textbox>
textbox value which should not exceed more than 200 characters and the textbox takes only string.
Which validator will be a good option ? i want to use custom validator, will it work with string values?

<asp:RegularExpressionValidator ID="regexTextBox1"
ControlToValidate="YourTextBoxID" runat="server"
ValidationExpression="^[\s\S]{0,200}$" Text="200 characters max" />

You can avoid the use of custom validator altogether.
If you only need to force the max length of a text box field you have this at your disposal
<asp:TextBox MaxLength="200" id="name" runat=server> </asp:TextBox>

Related

HTML MAILTO hyperlink doesn't respond

My hyperlink doesn't open up an email with my database text value.
I have a previous application that uses this exact format and works; however, for this application it doesn't.
One of the many examples I have referenced is: ASP.NET mailto: misfunction
my Database column name is email_Own and so I have tried to DataItem.email_Own and DataItem.email like other examples show to see if whether the value after DataItem is the database column name or not. Both don't work.
Working EX
My other application showed an email within a gridview so I am wondering if that is the reason why the coding below worked:
<asp:TemplateField HeaderText="Description" >
<ItemTemplate >
<br /><br />
Email:
<asp:HyperLink id="lnkEmail" cssClass="emailColor" runat="server" text='<%#DataBinder.Eval(Container, "DataItem.email") %>' NavigateUrl='<%#DataBinder.Eval(Container, "DataItem.email","MAILTO:{0}")%>'>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
Coding that doesn't work:
Any suggestions for the coding below? This hyperlink is inside a table.
<tr>
<td width="25%">
<font class="Blackfont" size="2" > <b>Owner Email </b> </font>
</td>
<td>
<asp:HyperLink id="Owner_E" runat="server" text='<%#DataBinder.Eval(Container, "DataItem.email") %>' NavigateUrl='<%#DataBinder.Eval(Container, "DataItem.email","MAILTO:{0}")%>'Font-Size="10pt"></asp:HyperLink>
</td>
</tr>
The text of the hyperlink shows up correctly when the page loads. Its the linking to mail that isn't working.
I also tried this code snippet instead but the hyperlink doesn't respond as well: NavigateUrl='<%#Bind("email_Own", "mailto:{0}") %>' Text='<%#Bind("email_Own") %>'
FYI:
I am not sure if this changes anything but I fill the hyperlink in VB.net like so:
If Not DsAds.Tables(0).Rows(0).Item(14) Is DBNull.Value Then
lnkEmail.Text = DsAds.Tables(0).Rows(0).Item(14)
End If
where DsAds is a dataset
The HTML source code shows this:
I referenced http://forums.asp.net/t/1071308.aspx?mailto+link+in+textbox
Like so:
<asp:HyperLink id="lnkEmail" runat="server" Font-Size="10pt" ></asp:HyperLink>
and in Page Load[at end of it] I add:
lnkEmail.NavigateUrl = "mailto:" + DsAds.Tables(0).Rows(0).Item(14)
lnkEmail.Text = DsAds.Tables(0).Rows(0).Item(14)

Gridview Calculated Field in Row

I am using Visual Studio 2010 and Visual Basic linked to a SQL database. I have a Gridview in which I want to have a calculated field, let's call it NoHoursOff, based on the fields in that row - BeginTimeOff and EndTimeOff.
After doing some research, I learned that I should use a TemplateField. I just don't understand how this works. I have tried with no success:
<asp:TemplateField HeaderText="Total Hours" >
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# "EndTimeOff" - "BeginTimeOff" %>' Width="100px"></asp:Label>>
</ItemTemplate>
</asp:TemplateField>
I also have tried replacing Text value with "EndTimeOff".subtract("BeginTimeOff") which works on another webpage. I don't understand how to do a calculated field! Please help or can you direct me to a tutorial that would explain this to me.
You need to create a function in the codebehind like this
public string getValue(object BeginTimeOff, object EndTimeOff)
{
return (Convert.ToDateTime(EndTimeOff.ToString()) - Convert.ToDateTime(BeginTimeOff.ToString())).ToString();
}
and in the Label this
Text=<%# getValue(Eval("BeginTimeOff"), Eval("EndTimeOff")) %>
then just set the format you want to display in the method (n days, hh.mm.ss, etc) to fit your requirement
Per your suggestions, I can't get it to work. Here is my aspx and vb code:
<asp:TemplateField HeaderText="TotalHours2" >
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# getValue(Eval("BeginTimeOff"), Eval("EndTimeOff")) %>' Width="100px"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
AND
Public Function getValue(BeginTimeOff As Object, EndTimeOff As Object) As String
Return (DateTime.Parse(EndTimeOff.ToString()) - DateTime.Parse(BeginTimeOff.ToString())).ToString()
End Function
It's probably something wrong with my attempt to convert C# to VB. Thanks for all your help! (FYI - I did get another function to work using your example - just not this new function. If you want to see code, I'll show it to you. It counts days between 2 dates, not including weekends and holidays. Thanks a million for helping me figure that one out!)

how to pass variable in the url from gridview in vb.net

I have Gridview of the form results. I am trying to add an url to one of the field. How do I pass the variable in the url. intLib is the variable. This is what I have:
VB.Net Code:
<a href="EditIncident.aspx?ID=<%# Eval("Inci_ID")%>&Val2="& intLib>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Inci_ID") %>'></asp:Label>
</a>
I created a session variable and passed it on to the next page.
Thanks for your help.

How to pass the querystring parameter into FormControl in vb.net

I am passing a value from one form to the other. The second form in inserting the data field into the table. How do I pass the ID(strPID) passed from the first form into the form control PatronIDTextBox of the second form?
VB.Code: on Page load -- strPID = Request.QueryString("value1")
Form control:
<InsertItemTemplate>
PatronID:
<asp:TextBox ID="PatronIDTextBox" runat="server" Text='<%# Bind("PatronID") %>' />
Thanks
Ok, Now I am trying to say it this way in object datasource so I can send it into insert statement without being displayed on the screen.
<Insert Parameters>
<asp:QueryStringParameter Name="PatronID" Type="int32" QueryStringField="value1" />
<asp:QueryStringParameter Name="PatronName" Type="String" QueryStringField="value2" />
</InsertParameter>
InsertCommand="INSERT INTO [tblIncident] ([PatronID], [PatronName]) values (#PatronID, #PatronName)
Have you tried directly putting the value into the textbox? Like this:
<asp:TextBox ID="PatronIDTextBox" runat="server" Text='<%= Request.QueryString("Value1") %>' />
Just be careful, because this approach could allow a XSS attack. You might want to read-up on those.
I deleted the text box for both id and name and instead I modified the objectdatasource Insert statement as follows. The value of value1 and value2 is captured on page load event.
<InsertParameters>
<asp:QueryStringParameter Name="PatronID" Type="Int32" QueryStringField="value1" />
<asp:QueryStringParameter Name="PatronName" Type="String" QueryStringField="value2"/>
</InsertParameters>

Making asp:Label a specific HTML tag

New to VB.net, just trying to figure out how to properly manipulate the asp:Label control.
I have a page that, based on if there are results, etc should display an <h1></h1> tag with a header, then the data. As I am using the code-behind model, my user facing page essentially just has the following:
<asp:Label ID="lblMessage" runat="server"
Visible="false" />
<asp:DataList ID="dlCurriculumLists" runat="server"
DataSourceID="sdsCurriculumLists"
DataKeyField="Entry No_"
RepeatLayout="Flow"
Visible="false">
<ItemTemplate>
<div>
<asp:HyperLink ID="hlCurriculum" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "Title") %>'
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "File Path") %>'
ToolTip='<%# DataBinder.Eval(Container.DataItem, "Title") %>'
Target="_blank"
Style="font-weight: bold;">
</asp:HyperLink>
</div>
</ItemTemplate>
</asp:DataList>
On my code-behind page, I then set the asp:Label and asp:DataList to Visible="true" based on the data from the database. Here's the catch - if there is data, I want to set lblMessage to be an H1, and if not, just standard Label text. I realize I can emulate the look through the CSS, but was just hoping there was another way (maybe similar to the ItemTemplate concept) to specify the HTML type of the Label control - it appears to be a by default.
For people coming from a VB background, it's a common mistake to think that the most basic control for displaying arbitary text is a Label.
That's not true. A label should label something, usually another UI control (that's what the AssociatedControlId property is for).
If you just want to display arbitrary text or HTML markup, use something more basic instead. Some examples are asp:Literal, asp:Placeholder or asp:Localize.
Using, for example, an asp:Literal called myLiteral, you can easily create a heading in code:
myLiteral.Text = "<h1>" & Server.HtmlEncode(myHeading) & "</h1>"
As far as I know, the asp:Label component will always generate a <label> HTML tag when its AssociatedControlId attribute is set.
What you could do instead is use a Literal Control and populate it with the HTML you wish at runtime.
UPDATE
One thing you could do to make this work as required using your current Label control is to have a theme for the label that marks it up as a H1. You could then toggle the controls EnableTheming property as required.
Aside from what already has been suggested here, you can also implement your own ASP.NET control with any properties you want, then modify its rendering on the fly, depending on the properties' values. It is pretty fun to do and is not as hard as one might think. Here is some information on the subject: http://msdn.microsoft.com/en-us/library/vstudio/zt27tfhy(v=vs.100).aspx