ASP.NET WebForms Evaluation

J

John Rivers

Hello,

I am in the process of evaluating ASP.NET

So far I am not impressed at all.

It seems to me that a basic evaluation of the PROs and CONs
of using things like HTML Server Controls, Data Controls, User Controls
etc. all breaks down the same way: lots of cons very few pros.

I understand that microsoft wants to make their development environment
easy for beginners, but they seem to expect
professional developers to use this rubbish as well.

-------------------------------------------------------------------
DataGrid & UserControls
-------------------------------------------------------------------

Pros
----

- saves me having to spend 1 minute typing simple code (ie: loop and
method)
- apparently saves me from worrying about about format (yeah, right)

Cons
----

- stops me from using OO programming conventions for html rendering
- risk of change in newer versions of asp.net
- takes time to learn when we have suitable skills already (ie: we know
html and can write code)
- this sort of declarative / over-encapsulated approach always results
in messy workarounds
- very inefficient pagination implementation - couldn't use in
production server
- lots of extra files to worry about (usercontrols, datasets)
- ASPX pages don't compile until called so takes longer to debug

Am I the only one who will be avoiding these "features"?

John Rivers
 
G

Grant Merwitz

My thoughts
- stops me from using OO programming conventions for html rendering

How on earth does it stop that, You can control the HTML
If you don't like the web control html, use html controls
If you don't like the DataGrids html, user a repeater/datalist
Hell, build a for loop, it can be done
- risk of change in newer versions of asp.net

Changes are well documented.
You can run all versions of .net simultaneously for testing
Besides, if it weren't changing, then it wouldn't be getting better
- takes time to learn when we have suitable skills already (ie: we know
html and can write code)

you still need to know Html in ASP.NET
Codes evolving, so must you
- this sort of declarative / over-encapsulated approach always results
in messy workarounds

Messy workarounds = bad coding or design
Sounds like its the developer thats the problem, not the tool
- very inefficient pagination implementation - couldn't use in
production server

Is that cause you don't know how, or it wouldn't work
Custom paging is available if you don't like the built in paging
i.e. its optional, you can still use traditional paging methods
- lots of extra files to worry about (usercontrols, datasets)

A DataSet is not a file, its an object
Usercontrols are reusable, so it makes sense to be a seperate file

- ASPX pages don't compile until called so takes longer to debug

Thats only the first time its called, it has to be compiled some time
 
T

tom pester

Hi John,

Ic you have made an effort so I'll try to respond objectivly.
I programmed in classic ASP for 5 years and have 2 years of ASP.NET experience.
- saves me having to spend 1 minute typing simple code (ie: loop and
method)

Lets do the test. You tell me how long it takes to have a datagrid that can
do the following
- edit
- sort
- paginate
- and lets thorw in a master detail construction

Once I see your page I will remake it in asp.net with the exact same functionality
so throw in some stuff that you think the datagrid can't do cause if its
inflexibilty.

Maybe you have written your own functions in cASP that make this easier but
in effect you have written your own datagrid then.
And that doesn't count cause we are comparing cASP and APS.NET out of the
box.
- stops me from using OO programming conventions for html rendering

What are you refering to?
- risk of change in newer versions of asp.net

Simply not true. IMO microsoft innovates all the time and has always a clean
and easy upgrade path.
If you want to program ASP.NET the cASP style you can do this with no problem.
But then you are misssing _a lot_
- takes time to learn when we have suitable skills already (ie: we
know
html and can write code)

ASP.NET provides abstractions to improve your productivity. I also think
that if you start with ASP.NET your mental model will not be as elaborate
as if you started to program with the primitives we had in cASP.
But I know zero assambler and I can still make pretty websites with cASP
and I can do it faster with ASP.NET (extreme argument).
- this sort of declarative / over-encapsulated approach always results
in messy workarounds

If the asp.net team didn't do such a good job than this could be the case.
However, they did a good job so just throw in some things in the test that
you think will require workarounds.
This is not a fair test (aiming concsiously at the weak spot) but Ill take
you on.
- very inefficient pagination implementation - couldn't use in
production server

I agree. For small sets of data its adequate but for large sets its terribly
inefficient. Did you know you can provide your own custom pagination?
- lots of extra files to worry about (usercontrols, datasets)

Consider those files as building blocks of other pages. Putting them in User/Custom
controls also lets them have events,cache control,...
I also don't use them much, I'd rather write a function that I can call but
its a matter of taste.
(I dont use typed datasets cause I think its too much overhead. Again, don't
use them if you want to. They are there if you like 'm ok?)

Maybe other developers can clearly state what the advantages are of user
controls vs function calls and where they shine.
- ASPX pages don't compile until called so takes longer to debug

Very annoying indeed. Advice : Switch to ASP.NET version 2 now and continue
your evalution http://lab.msdn.microsoft.com/express/vwd/

I hope you aren't a troll and do the test with me cause I'm really intrested
in the outcome.
I haven't seen any metrics that compare cASP and ASP.NET so this is an oppertunity.


Cheers,
Tom Pester
 
E

Eliyahu Goldin

I understand that microsoft wants to make their development environment
easy for beginners, but they seem to expect
professional developers to use this rubbish as well.

You will probably get a number of arguing responses, but there is some truth
in your statement. After a few years of intensive programming in asp.net, I
found it much more efficient if you start a new page from an html prototype
and than add "runat=server" as needed. And a repeater with databound items
gives you much more flexibility than a datagrid.

Eliyahu
 
J

John Rivers

tom said:
Hi John,

Ic you have made an effort so I'll try to respond objectivly.
I programmed in classic ASP for 5 years and have 2 years of ASP.NET experience.


Lets do the test. You tell me how long it takes to have a datagrid that can
do the following
- edit
- sort
- paginate
- and lets thorw in a master detail construction

using my "core" knowledge of html, sql, c#, framework
about 40 minutes

there is no point in learning and using non-core, arbitrary junk code
that microsoft creates for marketing purposes

i cannot write a SqlDataConnection class in 40 minutes, it would take
weeks
that is why i use ADO.NET

i cannot write a blistering fast webserver in less than
12 months, so I use IIS

i cannot write a transactional component architecture
so I use MTS

this does not hold true for these silly controls - they are a waste of
time
and people who use them will pay the price
Once I see your page I will remake it in asp.net with the exact same functionality
so throw in some stuff that you think the datagrid can't do cause if its
inflexibilty.

yes and it will be 90% your code and 10% datagrid
so why not go the whole hog and write your own loop too! :)
Maybe you have written your own functions in cASP that make this easier but
in effect you have written your own datagrid then.
And that doesn't count cause we are comparing cASP and APS.NET out of the
box.


What are you refering to?

C# is the most beautiful OO language i have ever seen
it is delicious - i want to use its powers for my html
rendering classes - i know i can if i want but what
i am complaining about is that microsoft doesn't want me to!
it wants me to wrap what would be methods into user control files
that aren't .net classes, they are "user controls" i can't call
them when I want, they have to be "placed" on a "design surface"
I can't extend them, override them or anything them.
if anthing needs OO programming it is UI rendering.
this is all I ask:

to write this:

void RenderHTML(string Title) {
%><html>
<head>
<title><%=HTML(Title)%></title>
</head><%
}

in my aspx page
with html, xml, wml whatever code coloring and completion inside the
code block
with proper syntax check during build (for both c# and html,
javascript) and now
i can build my rendering library properly.

they could have done this easily - but they chose to force the issue
and make people use user controls which are a flawed concept.
Simply not true. IMO microsoft innovates all the time and has always a clean
and easy upgrade path.
If you want to program ASP.NET the cASP style you can do this with no problem.
But then you are misssing _a lot_


ASP.NET provides abstractions to improve your productivity. I also think
that if you start with ASP.NET your mental model will not be as elaborate
as if you started to program with the primitives we had in cASP.
But I know zero assambler and I can still make pretty websites with cASP
and I can do it faster with ASP.NET (extreme argument).

i don't make pretty websites, i make e-businesses that have to work
every second of every day for years on end with no hiccups
would i choose to use weird abstractions designed to make coding easy
for begineers which add complexity and non-determinism to my apps? nope
If the asp.net team didn't do such a good job than this could be the case.
However, they did a good job so just throw in some things in the test that
you think will require workarounds.
This is not a fair test (aiming concsiously at the weak spot) but Ill take
you on.


I agree. For small sets of data its adequate but for large sets its terribly
inefficient. Did you know you can provide your own custom pagination?

but then what is the datagrid doing?
just a loop ...
Consider those files as building blocks of other pages. Putting them in User/Custom
controls also lets them have events,cache control,...
I also don't use them much, I'd rather write a function that I can call but
its a matter of taste.
(I dont use typed datasets cause I think its too much overhead. Again, don't
use them if you want to. They are there if you like 'm ok?)

if only it were that easy
the fact that they are there means I HAVE TO LEARN them
it is forced on me, that is why i am a "troll" today
i don't like being forced to learn junk
 
T

tom pester

Hello John,
using my "core" knowledge of html, sql, c#, framework about 40 minutes
this does not hold true for these silly controls - they are a waste of
time
and people who use them will pay the price

My first estemate is that I am 4 to 8 times faster. I don't want to make
it a "I am faster than you" contest. But I guess I just did :)
I still want to do the test if you are serious about it. If you give me a
working cASP page Ill make it an ASP.NET one _without_ compromsing.
Why are you saying its a waste of time? The datagrid is suited for the majority
of cases. If it is such a case than use it and be more productive.
If I need something different than a datagrid than I check out the datalist
or repeater. Only then I will write my own rs.MoveNext wheel.
yes and it will be 90% your code and 10% datagrid
so why not go the whole hog and write your own loop too! :)

You still want to do the test?
it wants me to wrap what would be methods into user control files
that aren't .net classes,

A user control _is_ a .net class that you express in a way that is exrpressed
in a way that is related to the problem domain.
( You can also write a custom control that looks exactly like a class )
if anthing needs OO programming it is UI rendering.
this is all I ask:
to write this:

void RenderHTML(string Title) {
%><html>
<head>
<title><%=HTML(Title)%></title>
</head><%
}
in my aspx page
with html, xml, wml whatever code coloring and completion inside the
code block
with proper syntax check during build (for both c# and html,
javascript) and now
i can build my rendering library properly.
they could have done this easily - but they chose to force the issue
and make people use user controls which are a flawed concept.

Switching to asp.net and finding that my render functions didn't work was
a pain indeed.
I used them all the time and now I had to write :
response.write("<head>")
instead of
<head>

Big deal? Maybe. Now that I write lots of .net code I don't mind.

You can still write the functions you are talking about so what's the poblem?

BTW Interspersing html and code this way did introduce a performance hit.
i don't make pretty websites, i make e-businesses that have to work
every second of every day for years on end with no hiccups
would i choose to use weird abstractions designed to make coding easy
for begineers which add complexity and non-determinism to my apps?
nope

Using superb controls that

- have been stress tested
- are virtualy bug free (you could do it better I know ;)
- are tested for security holes by good engineers and are scrutinized by
a community of thousands
- are extensible
- are free
- cooperate with other controls
- support caching
(-the asp.net v2 gridview does also do ajax pagination)

ere defenitly nice to have. Just use them where appropriate and you will
have more time to make a better site (or make more sites if its up to your
manager).

I have a feeling you only read about ASP.NET.
Did you actualy try to make a site with the controls just like in the days
you first discovered cASP and were an asp noob? Are do you approuch the subject
not open minded?
but then what is the datagrid doing?
just a loop ...

A Loop yes. A loop with built in edit support. Ow and sorting. Ah yes and
caching support too. And you can select a row too yes...etc
Its more than a loop John. See some of the properties that controls have
in my previous remark.
the fact that they are there means I HAVE TO LEARN them
it is forced on me, that is why i am a "troll" today
i don't like being forced to learn junk

Ok then. Try to convince your co-workers why they are bad design and stay
away from controls as for as you can.

Enough throwing arguments on the table for me. If you want to do the test
than lets to it through email and report back here.
If not than these are just words.

Switching to a new technology is always an experience. You start with an
attitude that you know everything and you see less experienced developers
getting up to speed much faster than you did using these abstractions. So
you check them out, dont fully understand the potential and go your own way.
Than you find a case where you indeed are more productive with the technology
and while using it find another suitable case. After some time you assimilate
it in your workflow and start doing everything with the new technology. You
are testing it to its limits.
Some time later you clearly see the overal picture and understand the potential
of the new technology and use it where appropriate.

Cheers,
Tom Pester
 
S

Sparky Arbuckle

" takes time to learn when we have suitable skills already (ie: we know

html and can write code) "

Use HTML to create a web application hooked up to Active Directory and
is used for maintaining employee file permissions and software
licensing. Send me the URL when completed in never.
 
J

John Rivers

Now I have thought it through I can see why they have organised ASPX
like this.

It allows designers to make changes, test and upload the ASPX pages
without having to recompile
or liaise with the developers.

It allows for developers to expose datasets etc. to designers who can
then use datagrids
for rendering etc.

User and custom controls can be created by developers for designers.

This make sense if you have a group of non-technical designers working
alongside
technical developers.

But it doesn't make sense if you are a single developer who prefers to
use classes
for ui rendering (like in Classic ASP) and need to develop
sophisticated applications
that microsofts controls simply don't allow for.

Thus I will carry on using:

void Render() {
Response.Write(@"
<here is my html/>
");
}

and I will have a multi-brandable, flexible, extendable rendering
library!

and miss out on html code completion and coloring
and having to use "" or ' instead of "

So now all I need to be happy is:

- allow classes and methods in aspx pages
- designers don't have to use them if they don't want to

and as for all this rubbish about code blocks and performance
casp and aspnet both jit compile and cache the native code

there is no performance penalty and never has been
 
L

Lucas Tam

But it doesn't make sense if you are a single developer who prefers to
use classes
for ui rendering (like in Classic ASP) and need to develop
sophisticated applications
that microsofts controls simply don't allow for.

Thus I will carry on using:

void Render() {
Response.Write(@"
<here is my html/>
");
}

and I will have a multi-brandable, flexible, extendable rendering
library!

and miss out on html code completion and coloring
and having to use "" or ' instead of "

So what's the difference between your library and Microsoft's
System.Web.UI namespace.

You're just reinventing the wheel!
 
J

John Rivers

Not much but they both suffer from the same problem I originally
indicated:

now I have to create HTML rendering code

in C#

that doesn't support <%%> code blocks

and require a very slow debugging cycle

as opposed to the simple solution I have put forward which

is to simply allow

classes and methods and codeblocks all mixed together

like classic asp

there would be no performance issue

as the aspx would be jit compiled once

and the code blocks would become:

Response.Write("whatever was in the codeblock");

microsoft have removed basic language constructs

for no good reason whatsoever

can you not see that?
 
L

Lucas Tam

microsoft have removed basic language constructs

for no good reason whatsoever

can you not see that?

They were removed to keep people from mixing HTML and code. Alot of people
find debugging (complex) mixed code to be a pain... but I guess you like.

Different strokes for different folks!

Maybe you should go with PHP? PHP offers these sorts of constructs and OO
support too.
 
J

John Rivers

Ok I am ready to try your test:

it is too complicated for me to give you my actual code
so what i have done is save the html from one page of my web app

with a quick explanation and lets see you pull it off in asp.net

key points to note:

- this is a single html form
- there is one main data entry form and two editable datasheets inside
this html form
- by clicking "save" users can simultaneously add, delete and update
multiple tables and records
- there are transactional wrappers around the work but *some* things
are allowed to fail whilst others succeed, these are than flagged in
red and a message shown
- full application-level database locking is in effect with a conflict
resolution
system in the user interface (so if another sales agent changes a field
in the same
locking zone (ie: a collection of cross dependent values - could be in
the same
record or others or other tables for that matter)
- every change in the database is logged (thats the auditlog link)
allowing administrators to traceback incorrect entries to the agent
concerned etc.
- when there are validation or locking errors these are reported back
to the user
in place, the fields are highlighted and an intelligent description of
the problem
is given, in the case of datasheets descriptions are given by tooltips,
indication of problem by color coding (red, green etc.)

- the little phone image links (you can't see) are part of the user
interface
into a custom CTI system i wrote that integrates a 100 extension
digital pbx
with the webapp for things like screen-popping, auto-number filling,
one click dialling, missed call management, web directed transfers etc.
(that means that
the system binds a pbx call to a web session, when you transfer the
call to
another agent their screen automatically opens the correct customer
profile)
(i just mentioned that because i'm proud of it)

- also to note is that this page was generated by a generic class
library that
can do it for any collection of tables, fields etc. that you like in
the database
so no handcoding to one table allowed! proper object oriented class
library please


here is the page:

(start)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>somecompany - Contact</TITLE>
<META http-equiv=Content-Type content="text/html;
charset=windows-1252">
<STYLE>.noborder {
BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT:
medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: #ffffcc
}
{
FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Tahoma
}
A {
COLOR: #0000ff; TEXT-DECORATION: none
}
A:hover {
TEXT-DECORATION: underline
}
BODY {
SCROLLBAR-FACE-COLOR: #99ccff; MARGIN: 0px; SCROLLBAR-HIGHLIGHT-COLOR:
#c1e1ff; SCROLLBAR-SHADOW-COLOR: #cccccc; SCROLLBAR-3DLIGHT-COLOR:
#eeeeee; SCROLLBAR-ARROW-COLOR: #000000; SCROLLBAR-TRACK-COLOR:
#eeeeee; SCROLLBAR-DARKSHADOW-COLOR: #666666
}
</STYLE>

<SCRIPT language=javascript>
function showContextMenu(menuDefs) {
var row1 = '<tr bgcolor="#CCCCCC" onmouseover="background(\'#EEEEEE\',
\'#FFFFFF\', this)" onmouseout="background(\'#CCCCCC\', \'#000000\',
this)"><td style="font-size:8pt;"><a
style="width:100%;text-decoration:none;color:#000000;"
onclick="hideContextMenu()" href="';
var row2= '">';
var row3 = '</a></td></tr>';
var menuDef;
var index;
var menuHTML;
var menuDIV;
menuDIV = document.all.contextMenu;
menuHTML = '<table
style="border-style:solid;border-color:#000000;border-width:1px;"
cellpadding="4" cellspacing="2" bgcolor="#CCCCCC">';
//menuHTML += '<tr bgcolor="#CCCCCC"><td><b>Context
Menu</b></td></tr>';
for (index=0; index<menuDefs.length; index++) {
menuHTML += row1 + menuDefs[index][1] + row2 + menuDefs[index][0] +
row3;
}
menuHTML += '</table>';
menuDIV.innerHTML = menuHTML;
//alert(cm.innerHTML);
menuDIV.style.posLeft = event.x + document.body.scrollLeft;
menuDIV.style.posTop = event.y + document.body.scrollTop;
menuDIV.style.visibility = 'visible';
menuDIV.focus();
//alert(menuDIV.innerHTML);
}

function background(color, textColor, object) {
object.style.background = color;
object.style.color = textColor;
}

function hideContextMenu() {
document.all.contextMenu.style.visibility = 'hidden';
}
</SCRIPT>

<META content="MSHTML 6.00.2900.2722" name=GENERATOR></HEAD>
<BODY onmouseup=hideContextMenu(); id="">
<DIV onmouseup="event.cancelBubble = true;"
onkeypress=hideContextMenu();
id=contextMenu
style="FONT-SIZE: 8pt; VISIBILITY: hidden; CURSOR: default;
FONT-FAMILY: Tahoma; POSITION: absolute"></DIV><!--
----
--->
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#99ccff><!---->
<TBODY>
<TR>
<TD noWrap width="33%"><B>somecompany Intranet</B></TD>
<TD noWrap align=middle width="33%"><B><A title="Change Login"

href="https://some.url.com:50080/Login.as...825%2D212234%2D7695408&Timer=77086%2E64&&amp;">SomeUser</A></B>

&nbsp;&nbsp;&nbsp;<A
href="https://some.url.com:50080/Extension.asp">Setup
Phone</A></TD>
<TD noWrap align=right width="33%"><B>[<A

href="https://some.url.com:50080/Default.asp">Home</A>]</B></TD></TR><!----></TBODY></TABLE><!---->
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#eeeeee><!---->
<TBODY>
<TR>
<TD noWrap><SPAN style="FONT-SIZE: 24pt; COLOR:
#0000ff">Contact</SPAN></TD>
<TD align=right><B>
<SCRIPT language=javascript>
<!--
if (window.opener) {
if (window.opener.getNavigatorID) {
var previousid = window.opener.getNavigatorID(1188, -1)
var nextid = window.opener.getNavigatorID(1188, 1)
if (previousid > -1) {
var startid = window.opener.getStartID()
document.write('&nbsp;[<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&amp;RecordID='
+ startid + '">Start</a>]');
document.write('&nbsp;[<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&amp;RecordID='
+ previousid + '">Previous</a>]');
} else {
document.write('&nbsp;[Start]');
document.write('&nbsp;[Previous]');
}
if (nextid > -1) {
var endid = window.opener.getEndID()
document.write('&nbsp;[<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&amp;RecordID='
+ nextid + '">Next</a>]');
document.write('&nbsp;[<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&amp;RecordID='
+ endid + '">End</a>]');
} else {
document.write('&nbsp;[Next]');
document.write('&nbsp;[End]');
}
}
}
//-->
</SCRIPT>
</B></TD></TR><!----></TBODY></TABLE><SPAN style="DISPLAY: none">
<FORM id=CompanyForm
action=/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&amp;

method=post></SPAN><!---->
<TABLE cellSpacing=0 cellPadding=6 width="100%" bgColor=#dddddd>
<TBODY>
<TR>
<TD noWrap><INPUT id="" accessKey=S type=submit value=" Save
"></TD>
<TD noWrap>[<A id=hello
onclick="return confirm('You will lose the current
changes.\r\n\r\nAre you sure?');"

href="https://some.url.com:50080/CDB/Form...0050825-212234-7695408&amp;RecordID=1188&amp;">Reload</A>]</TD>
<TD align=right width="100%"><B>&nbsp;<B>[<A

href="https://some.url.com:50080/CDB/Form...%2E64&&amp;ReturnURL=&amp;Timer=77087.92&amp;">AddNew</A>]</B>&nbsp;[<A

onclick="var w =
window.open('../Help.asp?Topic=CDB%2FFormContact%2Easp&amp;',
'CompanyIntranetHelp',
'scrollbars=yes,toolbar=no,status=no,menubar=no,width=640,height=320,left=120,top=120,resizable=yes');w.focus();return
false;"
href="https://some.url.com:50080/CDB/Help!">Help</A>]&nbsp;[<A

href="https://some.url.com:50080/Datasheet.asp?Source=Contacts&amp;">Contacts</A>]&nbsp;[<A


href="https://some.url.com:50080/Datashee...mp;Command=Search&amp;TableName=Contacts&amp;">AuditLog</A>]&nbsp;[<A

onfocus=this.click(); accessKey=B

href="https://some.url.com:50080/Datashee...$(any)}&amp;OwnerUserID={$(any)}&amp;OrderBy=">Back</A>]</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=6 width="100%" bgColor=#ffff00>
<TBODY>
<TR>
<TD><SPAN style="FONT-SIZE: 18pt">Record Saved
OK</SPAN></TD></TR></TBODY></TABLE><!---->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top><!---->
<TABLE cellSpacing=1 cellPadding=4 width=420 bgColor=#cccccc
border=0><!---->
<TBODY>
<TR>
<TD noWrap bgColor=#cccccc><B>PrimaryKey</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>ContactID:</TD>
<TD noWrap width="100%" bgColor=#ccffff>1188</TD>
<TD>&nbsp;</TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>CustomerRef</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>CustomerRef:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value="asp dot net sucks"
name=CustomerRef></TD>
<TD>&nbsp;</TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Identity</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Title:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=Mr name=Title></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>FirstName:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=John name=FirstName></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Initials:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" name=Initials></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>LastName:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=Rivers name=LastName></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Sex:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><SELECT style="WIDTH:
100%"
name=Sex> <OPTION></OPTION><OPTION
value=F>F</OPTION><OPTION
value=M selected>M*</OPTION></SELECT></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Nationality:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=British name=Nationality></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>CountryOfResidence:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value="United Kingdom"
name=CountryOfResidence></TD>
<TD>&nbsp;</TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Ownership</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Creator:</TD>
<TD noWrap width="100%" bgColor=#ccffff></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>OwnerUserID:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><SELECT style="WIDTH:
100%"
name=OwnerUserID> <OPTION selected></OPTION><OPTION
value=14>SomePeople (14)</OPTION></SELECT></TD>
<TD>&nbsp;</TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Qualification</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>ReferredBy:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><A

onclick="window.open('ToolContactReferredBys.asp?ContactID=1188&amp;',
'ContactReferredBys',
'scrollbars=yes,toolbar=no,status=no,menubar=no,width=640,height=480,left=120,top=120,resizable=yes').focus();return
false;"

href="https://some.url.com:50080/CDB/ReferredBys!">Select</A></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>ReferredBy:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><SELECT style="WIDTH:
100%"
name=ReferredBy> <OPTION></OPTION><OPTION value=Advertising

selected>Advertising*</OPTION><OPTION
value=Customer>Customer</OPTION><OPTION
value=Email>Email</OPTION><OPTION
value=Hotel>Hotel</OPTION><OPTION
value=Internet>Internet</OPTION><OPTION
value=Office>Office</OPTION></SELECT></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Budget:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" name=Budget></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>CloseBy:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" name=CloseBy></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>ContactStatus:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><SELECT style="WIDTH:
100%"
name=ContactStatus> <OPTION></OPTION><OPTION value=Cold>Not

interested (Cold)</OPTION><OPTION value=Initial>First
stages
(Initial)</OPTION><OPTION value=Warm>Second stages
(Warm)</OPTION><OPTION value=Hot>Very interested
(Hot)</OPTION><OPTION value=Sold selected>Has purchased
(Sold)*</OPTION></SELECT></TD>
<TD>&nbsp;</TD></TR>
<TR bgColor=#eeeeee>
<TD noWrap align=right>ContactStatusDate:</TD>
<TD vAlign=top align=left bgColor=#ccffff>25 Aug 2005
21:23</TD>
<TD>&nbsp;</TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Control</B></TD></TR>
<TR bgColor=#eeeeee>
<TD noWrap align=right>LastUpdated:</TD>
<TD vAlign=top align=left bgColor=#ccffff>25 Aug 2005
21:24</TD>
<TD>&nbsp;</TD></TR>
<TR>
<TD align=right colSpan=3><INPUT id="" accessKey=S
type=submit value=" Save "></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>
<!--

//-->
</SCRIPT>
<!----></TD>
<TD>&nbsp;</TD>
<TD vAlign=top width="100%"><!---->
<TABLE cellSpacing=1 cellPadding=2 width=10 bgColor=#cccccc
border=0>
<TBODY>
<TR bgColor=#dddddd>
<TD colSpan=99><B>ContactTelephones</B></TD></TR>
<TR bgColor=#eeeeee>
<TD><B>Delete</B></TD>
<TD vAlign=bottom noWrap><B>Type</B></TD>
<TD vAlign=bottom noWrap><B>CountryCode</B></TD>
<TD vAlign=bottom noWrap><B>AreaCode</B></TD>
<TD vAlign=bottom noWrap><B>Number</B></TD>
<TD vAlign=bottom noWrap><B>Extra</B></TD>
<TD vAlign=bottom noWrap><B>Usage</B></TD>
<TD><B>&nbsp;</B></TD></TR>
<TR bgColor=#ffffcc>
<TD><INPUT type=checkbox value=494
name=ContactTelephones/Delete></TD>
<TD title="" width="100%" bgColor=#ffffcc><SELECT
name=ContactTelephones/494/Type> <OPTION></OPTION><OPTION

selected>Mobile</OPTION><OPTION>Home</OPTION><OPTION>Office</OPTION><OPTION>Fax</OPTION><OPTION>SMS</OPTION></SELECT>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
value=44 name=ContactTelephones/494/CountryCode>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
value=7740 name=ContactTelephones/494/AreaCode>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
value=123456 name=ContactTelephones/494/Number>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
name=ContactTelephones/494/Extra>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
value=anytime name=ContactTelephones/494/Usage>
<TD noWrap><IMG title=Dial style="CURSOR: hand"
onclick="
this.src =
'../Dial.asp?Command=Dial&amp;Mode=Image&amp;Number=000447740123456'
"

src="Demonstration_files/Phone.16x16.gif"> <IMG
title=Hangup
style="CURSOR: hand"
onclick="
this.src =
'../Dial.asp?Command=Hangup&amp;Mode=Image'
"
src="Demonstration_files/PhoneHangup.16x16.gif"></TD></TR>
<TR title="" bgColor=#ffff00>
<TD>&nbsp;</TD>
<TD width="100%"><SELECT
name=ContactTelephones/NewRecord/Type>
<OPTION

selected></OPTION><OPTION>Mobile</OPTION><OPTION>Home</OPTION><OPTION>Office</OPTION><OPTION>Fax</OPTION><OPTION>SMS</OPTION></SELECT>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"
name=ContactTelephones/NewRecord/CountryCode>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"
name=ContactTelephones/NewRecord/AreaCode>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"
name=ContactTelephones/NewRecord/Number>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"
name=ContactTelephones/NewRecord/Extra>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"
name=ContactTelephones/NewRecord/Usage>
<TD noWrap></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=1 cellPadding=2 width=10 bgColor=#cccccc
border=0>
<TBODY>
<TR bgColor=#dddddd>
<TD colSpan=99><B>Addresses</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=bottom noWrap><B>Email</B></TD></TR>
<TR bgColor=#ffffcc>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
[email protected] name=Addresses/7994/Email></TD>
<TR bgColor=#ffffcc>
<TD title="" width="100%" bgColor=#ffffcc><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffffcc"
[email protected] name=Addresses/7995/Email></TD>
<TR title="" bgColor=#ffff00>
<TD width="100%"><INPUT
style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT:
0px; WIDTH: 100%; BORDER-BOTTOM: 0px; BACKGROUND-COLOR: #ffff00"

name=Addresses/NewRecord/Email></TD></TR></TBODY></TABLE><BR><!--
---- CONTACT NOTES SECTION
--->
<TABLE cellSpacing=1 cellPadding=4 width="100%" bgColor=#cccccc
border=0><TBODY>
<TR bgColor=#eeeeee>
<TD vAlign=top align=left>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><B>Notes</B></TD>
<TD align=right><A
href="Demonstration_files/ToolContactNotes.htm"

target=Extra/ContactNotes>Show</A></TD></TR></TBODY></TABLE></TD></TR>
<TR bgColor=#ffffcc>
<TD vAlign=top align=left><TEXTAREA style="BORDER-RIGHT:
medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH:
100%; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: #ffffcc"
name=Extra/ContactNotes rows=3></TEXTAREA></TD></TR>
<TR bgColor=#ffffff>
<TD vAlign=top align=left><IFRAME name=Extra/ContactNotes
src="Demonstration_files/ToolContactNotes.htm"
frameBorder=0
width="100%">IFRAME Support
Required</IFRAME></TD></TR></TBODY></TABLE><!--
---- CONTACT PROPERTIES SECTION
---><BR>
<TABLE cellSpacing=1 cellPadding=4 width="100%" bgColor=#cccccc
border=0><TBODY>
<TR bgColor=#eeeeee>
<TD vAlign=top align=left>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><B>Properties</B></TD>
<TD align=right><A

href="https://some.url.com:50080/Datashee...34%2D7695408&ContactID=1188&property_id=&amp;">Add</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!--
---- CONTACT DEVELOPMENTS SECTION
---><BR>
<TABLE cellSpacing=1 cellPadding=4 bgColor=#cccccc border=0>
<TBODY>
<TR bgColor=#eeeeee>
<TD vAlign=top align=left><B>[<A

onclick="window.open('ToolContactDevelopments.asp?ContactID=1188&amp;',
'ContactDevelopments',
'scrollbars=yes,toolbar=no,status=no,menubar=no,width=640,height=480,left=120,top=120,resizable=yes').focus();return
false;"

href="https://some.url.com:50080/CDB/Developments!">Developments</A>]</B>

of Interest</TD></TR>
<TR bgColor=#ffffff>
<TD vAlign=top align=left>Burj Dubai Tall Tower</TD></TR>
<TR bgColor=#ffffff>
<TD vAlign=top align=left>Discovery
Gardens</TD></TR></TBODY></TABLE><!----></TD></TR></TBODY></TABLE><!----></FORM><!----></BODY></HTML>
(end)
 
J

John Rivers

no takers then

doesn't surprise me

you've probably never even seen

multiple editable datasheets and forms inside a single html form
before

and probably don't even know what application-level database locking
means

yet you think know enough to criticise me

pah

here is another little gem of wisdom for you:

"it is impossible to make something simpler than it is"


i suppose you can disagree with that too, right?
 
D

dsfsdfs878

John,

I had a look at your web page in detail and read what you said.

I must admit I am impressed.

I could not easily implement that myself.

Although your other postings on this newsgroup are a bit childish and
argumentative nobody can deny that you are working at a much higher
level than average.

I also see your point about code blocks, they are just a syntax
construct
and there is no reason to deny them to developers, if it fits their
needs.

Maybe if your approach was more friendly and less confrontational you
would have got a better response?

Best of luck,

Morgan
 
J

Juan T. Llibre

re:
Maybe if your approach was more friendly and less confrontational

No kidding !

So, far, in just 3 short days, he has spit these out :
yet you think know enough to criticise me
you are silly
now run along you before i eat you
yet people on this newsgroup seem to resist that which i find rather odd
credit to me then for just showing the community
a lean and high performance approach!
please somebody say you understand me!
i know i am right!
developing sophisticated web applications in .net is a joke
Most of ASP.NET is conceptually flawed architecture and implementation.
there is no point in learning and using non-core, arbitrary junk code
that microsoft creates for marketing purposes
you guys are still too dumb to get it

And, to an unrelated post asking for advice, he spat out this :

"delete the data in the production database then it will run faster"

This is not someone who's trying to help.

He's an argumentative sob trying to pick a fight,
who pooh-poohs everybody's opinion but his own,
and who thinks everybody is dumb and that he's a genius.

This is my final post on our latest troll.

If anybody else wants to waste his time on him, go ahead.
I've moved him to my killfile.
 
J

John Rivers

I notice that you still haven't shared any of your code.

I wonder why.

I like it in your killfile, your haven't come up with one intelligent
reply.

Adios, Juanito


re:
Maybe if your approach was more friendly and less confrontational

No kidding !

So, far, in just 3 short days, he has spit these out :
yet you think know enough to criticise me
you are silly
now run along you before i eat you
yet people on this newsgroup seem to resist that which i find rather odd
credit to me then for just showing the community
a lean and high performance approach!
please somebody say you understand me!
i know i am right!
developing sophisticated web applications in .net is a joke
Most of ASP.NET is conceptually flawed architecture and implementation.
there is no point in learning and using non-core, arbitrary junk code
that microsoft creates for marketing purposes
you guys are still too dumb to get it

And, to an unrelated post asking for advice, he spat out this :

"delete the data in the production database then it will run faster"

This is not someone who's trying to help.

He's an argumentative sob trying to pick a fight,
who pooh-poohs everybody's opinion but his own,
and who thinks everybody is dumb and that he's a genius.

This is my final post on our latest troll.

If anybody else wants to waste his time on him, go ahead.
I've moved him to my killfile.
 
G

Guest

First, you are funny...
second:

-> why don't you use a stylesheet???
-> who did the design, it is really ugly ??
-> what is the reason to block the context menu, aren't the users allowed to
see you html code, if true, why, are you ashamed of it?
-> why do you use ' and " in the same javascript strings ???
-> whats with the <!----> blocks...
-> why use ../ and https://some.url.com/50080, stick to ../ ?
-> why don't you use the correct port for https trafic (but this can be a
valid usage)
-> where's the actual asp code, I only see the html output...
-> was it frontpage or another crappy tool you used to create this?

this is my very first post in this newsgroup, so be honered :)

John Rivers said:
Ok I am ready to try your test:

it is too complicated for me to give you my actual code
so what i have done is save the html from one page of my web app

with a quick explanation and lets see you pull it off in asp.net

key points to note:

- this is a single html form
- there is one main data entry form and two editable datasheets inside
this html form
- by clicking "save" users can simultaneously add, delete and update
multiple tables and records
- there are transactional wrappers around the work but *some* things
are allowed to fail whilst others succeed, these are than flagged in
red and a message shown
- full application-level database locking is in effect with a conflict
resolution
system in the user interface (so if another sales agent changes a field
in the same
locking zone (ie: a collection of cross dependent values - could be in
the same
record or others or other tables for that matter)
- every change in the database is logged (thats the auditlog link)
allowing administrators to traceback incorrect entries to the agent
concerned etc.
- when there are validation or locking errors these are reported back
to the user
in place, the fields are highlighted and an intelligent description of
the problem
is given, in the case of datasheets descriptions are given by tooltips,
indication of problem by color coding (red, green etc.)

- the little phone image links (you can't see) are part of the user
interface
into a custom CTI system i wrote that integrates a 100 extension
digital pbx
with the webapp for things like screen-popping, auto-number filling,
one click dialling, missed call management, web directed transfers etc.
(that means that
the system binds a pbx call to a web session, when you transfer the
call to
another agent their screen automatically opens the correct customer
profile)
(i just mentioned that because i'm proud of it)

- also to note is that this page was generated by a generic class
library that
can do it for any collection of tables, fields etc. that you like in
the database
so no handcoding to one table allowed! proper object oriented class
library please


here is the page:

(start)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>somecompany - Contact</TITLE>
<META http-equiv=Content-Type content="text/html;
charset=windows-1252">
<STYLE>.noborder {
BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT:
medium none; BORDER-BOTTOM: medium none; BACKGROUND-COLOR: #ffffcc
}
{
FONT-SIZE: 8pt; COLOR: #000000; FONT-FAMILY: Tahoma
}
A {
COLOR: #0000ff; TEXT-DECORATION: none
}
A:hover {
TEXT-DECORATION: underline
}
BODY {
SCROLLBAR-FACE-COLOR: #99ccff; MARGIN: 0px; SCROLLBAR-HIGHLIGHT-COLOR:
#c1e1ff; SCROLLBAR-SHADOW-COLOR: #cccccc; SCROLLBAR-3DLIGHT-COLOR:
#eeeeee; SCROLLBAR-ARROW-COLOR: #000000; SCROLLBAR-TRACK-COLOR:
#eeeeee; SCROLLBAR-DARKSHADOW-COLOR: #666666
}
</STYLE>

<SCRIPT language=javascript>
function showContextMenu(menuDefs) {
var row1 = '<tr bgcolor="#CCCCCC" onmouseover="background(\'#EEEEEE\',
\'#FFFFFF\', this)" onmouseout="background(\'#CCCCCC\', \'#000000\',
this)"><td style="font-size:8pt;"><a
style="width:100%;text-decoration:none;color:#000000;"
onclick="hideContextMenu()" href="';
var row2= '">';
var row3 = '</a></td></tr>';
var menuDef;
var index;
var menuHTML;
var menuDIV;
menuDIV = document.all.contextMenu;
menuHTML = '<table
style="border-style:solid;border-color:#000000;border-width:1px;"
cellpadding="4" cellspacing="2" bgcolor="#CCCCCC">';
//menuHTML += '<tr bgcolor="#CCCCCC"><td><b>Context
Menu</b></td></tr>';
for (index=0; index<menuDefs.length; index++) {
menuHTML += row1 + menuDefs[index][1] + row2 + menuDefs[index][0] +
row3;
}
menuHTML += '</table>';
menuDIV.innerHTML = menuHTML;
//alert(cm.innerHTML);
menuDIV.style.posLeft = event.x + document.body.scrollLeft;
menuDIV.style.posTop = event.y + document.body.scrollTop;
menuDIV.style.visibility = 'visible';
menuDIV.focus();
//alert(menuDIV.innerHTML);
}

function background(color, textColor, object) {
object.style.background = color;
object.style.color = textColor;
}

function hideContextMenu() {
document.all.contextMenu.style.visibility = 'hidden';
}
</SCRIPT>

<META content="MSHTML 6.00.2900.2722" name=GENERATOR></HEAD>
<BODY onmouseup=hideContextMenu(); id="">
<DIV onmouseup="event.cancelBubble = true;"
onkeypress=hideContextMenu();
id=contextMenu
style="FONT-SIZE: 8pt; VISIBILITY: hidden; CURSOR: default;
FONT-FAMILY: Tahoma; POSITION: absolute"></DIV><!--
----
--->
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#99ccff><!---->
<TBODY>
<TR>
<TD noWrap width="33%"><B>somecompany Intranet</B></TD>
<TD noWrap align=middle width="33%"><B><A title="Change Login"

href="https://some.url.com:50080/Login.as...0050825%2D212234%2D7695408&Timer=77086%2E64&&">SomeUser</A></B>

<A
href="https://some.url.com:50080/Extension.asp">Setup
Phone</A></TD>
<TD noWrap align=right width="33%"><B>[<A

href="https://some.url.com:50080/Default.asp">Home</A>]</B></TD></TR><!----></TBODY></TABLE><!---->
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#eeeeee><!---->
<TBODY>
<TR>
<TD noWrap><SPAN style="FONT-SIZE: 24pt; COLOR:
#0000ff">Contact</SPAN></TD>
<TD align=right><B>
<SCRIPT language=javascript>
<!--
if (window.opener) {
if (window.opener.getNavigatorID) {
var previousid = window.opener.getNavigatorID(1188, -1)
var nextid = window.opener.getNavigatorID(1188, 1)
if (previousid > -1) {
var startid = window.opener.getStartID()
document.write(' [<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&RecordID='
+ startid + '">Start</a>]');
document.write(' [<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&RecordID='
+ previousid + '">Previous</a>]');
} else {
document.write(' [Start]');
document.write(' [Previous]');
}
if (nextid > -1) {
var endid = window.opener.getEndID()
document.write(' [<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&RecordID='
+ nextid + '">Next</a>]');
document.write(' [<a
href="/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&RecordID='
+ endid + '">End</a>]');
} else {
document.write(' [Next]');
document.write(' [End]');
}
}
}
//-->
</SCRIPT>
</B></TD></TR><!----></TBODY></TABLE><SPAN style="DISPLAY: none">
<FORM id=CompanyForm
action=/CDB/FormContact.asp?InstanceID=20050825%2D212234%2D7695408&

method=post></SPAN><!---->
<TABLE cellSpacing=0 cellPadding=6 width="100%" bgColor=#dddddd>
<TBODY>
<TR>
<TD noWrap><INPUT id="" accessKey=S type=submit value=" Save
"></TD>
<TD noWrap>[<A id=hello
onclick="return confirm('You will lose the current
changes.\r\n\r\nAre you sure?');"

href="https://some.url.com:50080/CDB/Form...anceID=20050825-212234-7695408&RecordID=1188&">Reload</A>]</TD>
<TD align=right width="100%"><B> <B>[<A

href="https://some.url.com:50080/CDB/Form...&Timer=77086%2E64&&ReturnURL=&Timer=77087.92&">AddNew</A>]</B> [<A

onclick="var w =
window.open('../Help.asp?Topic=CDB%2FFormContact%2Easp&',
'CompanyIntranetHelp',
'scrollbars=yes,toolbar=no,status=no,menubar=no,width=640,height=320,left=120,top=120,resizable=yes');w.focus();return
false;"
href="https://some.url.com:50080/CDB/Help!">Help</A>] [<A

href="https://some.url.com:50080/Datasheet.asp?Source=Contacts&">Contacts</A>] [<A


href="https://some.url.com:50080/Datasheet.asp?Source=AuditLog&Command=Search&TableName=Contacts&">AuditLog</A>] [<A

onfocus=this.click(); accessKey=B

href="https://some.url.com:50080/Datashee...UserID={$(any)}&OwnerUserID={$(any)}&OrderBy=">Back</A>]</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=6 width="100%" bgColor=#ffff00>
<TBODY>
<TR>
<TD><SPAN style="FONT-SIZE: 18pt">Record Saved
OK</SPAN></TD></TR></TBODY></TABLE><!---->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top><!---->
<TABLE cellSpacing=1 cellPadding=4 width=420 bgColor=#cccccc
border=0><!---->
<TBODY>
<TR>
<TD noWrap bgColor=#cccccc><B>PrimaryKey</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>ContactID:</TD>
<TD noWrap width="100%" bgColor=#ccffff>1188</TD>
<TD> </TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>CustomerRef</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>CustomerRef:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value="asp dot net sucks"
name=CustomerRef></TD>
<TD> </TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Identity</B></TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Title:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=Mr name=Title></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>FirstName:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=John name=FirstName></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Initials:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" name=Initials></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>LastName:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=Rivers name=LastName></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Sex:</TD>
<TD noWrap width="100%" bgColor=#eeeeee><SELECT style="WIDTH:
100%"
name=Sex> <OPTION></OPTION><OPTION
value=F>F</OPTION><OPTION
value=M selected>M*</OPTION></SELECT></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>Nationality:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value=British name=Nationality></TD>
<TD> </TD></TR>
<TR bgColor=#eeeeee>
<TD vAlign=top align=right>CountryOfResidence:</TD>
<TD noWrap width="100%" bgColor=#ffffcc><INPUT class=noborder
id=""
style="WIDTH: 100%" value="United Kingdom"
name=CountryOfResidence></TD>
<TD> </TD></TR><!---->
<TR>
<TD noWrap bgColor=#cccccc><B>Ownership</B></TD></TR>
<TR bgColor=#eeeeee>
 
J

John Rivers

Hi Bork,

I like your funky approach to newsgroups, please see my replies below:

-> why don't you use a stylesheet???

i use an inline stylesheet, i don't like external ones

-> who did the design, it is really ugly ??

there is no design - it is a functional intranet for making money

-> what is the reason to block the context menu, aren't the users
allowed to
see you html code, if true, why, are you ashamed of it?

it is a re-usable popup menu that appears when you click a link
(like right click in windows)

-> why do you use ' and " in the same javascript strings ???

that is javascript string literals, you can do this: 'hello"there' or
this "hello'there" (rtfm!)

-> whats with the <!----> blocks...

i like them

-> why use ../ and https://some.url.com/50080, stick to ../ ?

there is very good reason
the fully qualified urls are from a class library that decides whether
to switch between http and https depending on certain factors

the / links are generated by self-referencing urls that wish to
maintain
the current ssl status whether http or https

when developing web apps which use ssl there are special
guidelines you have to follow regarding links, actions, images and
redirects

most people don't know them, which is why you get ssl warnings on
many websites - but not mine!

-> why don't you use the correct port for https trafic (but this can be
a
valid usage)

this is a private intranet application - you should never host such
an application on the correct well-known port for obvious reasons

-> where's the actual asp code, I only see the html output...

i can't give out my code, it belongs to the customer

-> was it frontpage or another crappy tool you used to create this?

ha ha - no way, HAND CRAFTED MAN!

this is my very first post in this newsgroup, so be honered :)

I am honoured!

Just out of interest how many years commercial experience do you have
(ie: building systems that can't go down for even 10 minutes and are
used
24x7 by thousands of users and form the core of a business?)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top