How to change Action attribute of the aspnetForm on MasterPage dynamically

We are trying to modify the Action attribute of the main ASP.NET form in the master page dynamically.

The page has a radio button, user selects one of the options and clicks on submit, on postback, based on the selection the Form’s action attribute should be set and the form should be submitted again automatically.

We were trying to use JavaScript for the same.

document.forms[0].action = "option1.aspx";
document.forms[0].submit();

But this doesn’t seem to be working, there is no impact on the action attribute.

if we don’t use a master page, this can be achieved easily by using

this.Form.Action = "option1.aspx";
ClientScript.RegisterStartupScript(this.GetType(),"test1",
    "document.form[0].submit();",true);

Sadly, we cant remove the master page .. any pointers on how can this be achieved.. ?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

This is something which I have read they wish they had not done. The Form tag gets its action attribute hardcoded. You have to use a Control Adapter in order to control its construction at runtime. I use it especially for URL Rewriting, when I require the postback URL to be the rewritten one I have created. Scott Gu made the code for it and you can find it here:

http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule1.zip

And the address for the article:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

Method 2

Does the form need to pass the values to the resulting page? If not, why don’t you just use Response.Redirect to the correct page? For example, presuming you are using a RadioButtonList called lstOptions:

protected void btnSubmit_Click(object sender, EventArgs ags) {
        switch (lstOptions.SelectedValue) {
            case "option1":
                Response.Redirect("~/option1.apsx");
                break;
            //etc
        }
}

If you must pass the values why are you even triggering a post back at all? It sounds like you could accomplish what you want by just using javascript. For example presuming your form is named form1 and your radio buttons have a name of options:

<input type="submit" value="Submit" onclick="javascript:submitForm()" />

<script type="text/javascript">
   function submitForm() {
      for (var i=0; i < document.form1.options.length; i++) {
         if (document.form1.options[i].checked) {
            document.forms[0].action = "option" + i + ".aspx";
            document.forms[0].submit();
         }
      }
   }
</script>


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x