views:

270

answers:

2

Dynamicaly adding a form to a page and submitting it in c#. Works fine in IE but just realized its not working in chrome. Im doing it as a function of a PayPal Transaction Object I built for a little ecomerce app. Here is the code.

    private void PayPalPostScriptLONG(Page page)
    {
        StringBuilder strScript = new StringBuilder();
        strScript.Append("<script language='javascript'>");
        if (UserID == string.Empty || EventID == string.Empty || TransactionType == string.Empty)
        {
            strScript.Append("alert('missing event, user, or transactiontype');");
        }
        else
        {
            strScript.AppendFormat("myform=document.createElement('form'); myform.method='post'; myform.target='_top'; myform.action='{0}'; myform.name='frmPP';", Paypal);
            strScript.AppendFormat("input1=document.createElement('input'); input1.type='hidden'; input1.name='cmd'; input1.value='{0}'; myform.appendChild(input1);", Cmd);
            strScript.AppendFormat("input2=document.createElement('input'); input2.type='hidden'; input2.name='business'; input2.value='{0}'; myform.appendChild(input2);", Business);
            strScript.AppendFormat("input3=document.createElement('input'); input3.type='hidden'; input3.name='item_name'; input3.value='{0}'; myform.appendChild(input3);", Item_name);
            strScript.AppendFormat("input4=document.createElement('input'); input4.type='hidden'; input4.name='amount'; input4.value='{0}'; myform.appendChild(input4);", Amount);
            strScript.AppendFormat("input5=document.createElement('input'); input5.type='hidden'; input5.name='return'; input5.value='{0}'; myform.appendChild(input5);", ReturnURL);
            strScript.AppendFormat("input6=document.createElement('input'); input6.type='hidden'; input6.name='custom'; input6.value='{0}'; myform.appendChild(input6);", Custom);
            strScript.AppendFormat("input7=document.createElement('input'); input7.type='hidden'; input7.name='on0'; input7.value='uID'; myform.appendChild(input7);");
            strScript.AppendFormat("input8=document.createElement('input'); input8.type='hidden'; input8.name='os0'; input8.value='{0}'; myform.appendChild(input8);", UserID);
            strScript.AppendFormat("input9=document.createElement('input'); input9.type='hidden'; input9.name='on1'; input9.value='eID'; myform.appendChild(input9);");
            strScript.AppendFormat("input10=document.createElement('input'); input10.type='hidden'; input10.name='os1'; input10.value='{0}'; myform.appendChild(input10);", EventID);
            strScript.AppendFormat("input11=document.createElement('input'); input11.type='hidden'; input11.name='on2'; input11.value='type'; myform.appendChild(input11);");
            strScript.AppendFormat("input12=document.createElement('input'); input12.type='hidden'; input12.name='os2'; input12.value='{0}'; myform.appendChild(input12);", TransactionType);
            strScript.AppendFormat("input13=document.createElement('input'); input13.type='hidden'; input13.name='address1'; input13.value='{0}'; myform.appendChild(input13);", Address1);
            strScript.AppendFormat("input14=document.createElement('input'); input14.type='hidden'; input14.name='address2'; input14.value='{0}'; myform.appendChild(input14);", Address2);
            strScript.AppendFormat("input15=document.createElement('input'); input15.type='hidden'; input15.name='city'; input15.value='{0}'; myform.appendChild(input15);", City);
            strScript.AppendFormat("input16=document.createElement('input'); input16.type='hidden'; input16.name='email'; input16.value='{0}'; myform.appendChild(input16);", Email);
            strScript.AppendFormat("input17=document.createElement('input'); input17.type='hidden'; input17.name='first_name'; input17.value='{0}'; myform.appendChild(input17);", First_name);
            strScript.AppendFormat("input18=document.createElement('input'); input18.type='hidden'; input18.name='last_name'; input18.value='{0}'; myform.appendChild(input18);", Last_name);
            strScript.AppendFormat("input19=document.createElement('input'); input19.type='hidden'; input19.name='state'; input19.value='{0}'; myform.appendChild(input19);", State);
            strScript.AppendFormat("input20=document.createElement('input'); input20.type='hidden'; input20.name='zip'; input20.value='{0}'; myform.appendChild(input20);", Zip);
            strScript.AppendFormat("input21=document.createElement('input'); input21.type='hidden'; input21.name='night_ phone_a'; input21.value='{0}'; myform.appendChild(input21);", PhonePart1);
            strScript.AppendFormat("input22=document.createElement('input'); input22.type='hidden'; input22.name='night_ phone_b'; input22.value='{0}'; myform.appendChild(input22);", PhonePart2);
            strScript.AppendFormat("input23=document.createElement('input'); input23.type='hidden'; input23.name='night_ phone_c'; input23.value='{0}'; myform.appendChild(input23);", PhonePart3);


            strScript.Append("document.appendChild(myform);");
            strScript.Append("myform.submit();");
        }
        strScript.Append("</script>");
        page.ClientScript.RegisterClientScriptBlock(typeof(Page), "PPSubmit", strScript.ToString());
    }

Any help would be greatly appreciated!!

Thanks!


i ended up taking jumpdarts advice and using the following code:

    private string GetForm()
    {            
        StringBuilder ppForm = new StringBuilder();
        ppForm.AppendFormat("<Form name=\"frmPP\" id=\"frmPP\" action=\"{0}\" method=\"post\" target=\"_top\" \">", Paypal);
        AddInput(ppForm,"cmd",Cmd);
        AddInput(ppForm,"business",Business);
        AddInput(ppForm,"item_name",Item_name);
        AddInput(ppForm,"amount",Amount);
        AddInput(ppForm,"return",ReturnURL);
        AddInput(ppForm,"custom",Custom);
        AddInput(ppForm,"on0",UserID);
        AddInput(ppForm,"os0","uID");
        AddInput(ppForm,"on1",EventID);
        AddInput(ppForm,"os1","eID");
        AddInput(ppForm,"on2",TransactionType);
        AddInput(ppForm,"os2","type");
        AddInput(ppForm,"address1",Address1);
        AddInput(ppForm,"address2",Address2);
        AddInput(ppForm,"city",City);
        AddInput(ppForm,"email",Email);
        AddInput(ppForm,"first_name",First_name);
        AddInput(ppForm,"last_name",Last_name);
        AddInput(ppForm,"state",State);
        AddInput(ppForm,"zip",Zip);
        AddInput(ppForm,"night_ phone_a",PhonePart1);
        AddInput(ppForm,"night_ phone_b",PhonePart2);
        AddInput(ppForm,"night_ phone_c",PhonePart3);

        return ppForm.ToString();
    }

    private void AddInput(StringBuilder ppForm, string name, string value)
    {
        ppForm.AppendFormat("<input type=\"hidden\" name=\"{0}\" value=\"{1}\">", name, value);
    }

    private void PayPalPostScriptLONG(Page page)
    {

        HttpContext.Current.Response.Write(GetForm());//add form to page

        StringBuilder strScript = new StringBuilder();
        strScript.Append("<script language='javascript'>");
        if (UserID == string.Empty || EventID == string.Empty || TransactionType == string.Empty)
        {
            strScript.Append("alert('missing event, user, or transactiontype');");
        }
        strScript.Append("var ctlForm = document.getElementById('frmPP');");
        strScript.Append("ctlForm.submit();");
        strScript.Append("</script>");
        page.ClientScript.RegisterClientScriptBlock(typeof(Page), "PPSubmit", strScript.ToString());

    }
A: 

Use <script type="text/javascript"> !!

Anpher
did not work !! I think the problem was me trying to append the form control. I was appending this JS from an aspx page within an iframe and different browsers were having fits. Instead I did as jumpdart said and wrote the form out as html in the response and used the js to find and submit it... Thanks tho... i did add the type =)
spaghetticowboy
+1  A: 

Dont do it this way. Write your form out as html text to your response then append a jscript function that finds it and submits it.

Like so:

Response.Write(<Form...);
StringBuilder strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var daForm = document.getElementById('frmPP');");
strScript.Append("daForm.submit();");
strScript.Append("</script>");
ClientScript.RegisterClientScriptBlock(typeof(Page), "PPSubmit", strScript.ToString());
jumpdart
yeah i ended up doing this and it worked
spaghetticowboy