2006-10-23 Igor Zelmanovich <igorz@mainsoft.com>
authorIgor Zelmanovich <igorz@mono-cvs.ximian.com>
Mon, 23 Oct 2006 15:26:14 +0000 (15:26 -0000)
committerIgor Zelmanovich <igorz@mono-cvs.ximian.com>
Mon, 23 Oct 2006 15:26:14 +0000 (15:26 -0000)
* FormView.cs: fixed: IPostBackContainer.GetPostBackOptions method.

svn path=/trunk/mcs/; revision=66905

mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/FormView.cs
mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs

index d940bce54b978a9eb85f61ca715804739f21eb52..4dd594771dbde7580198ec740b24d6fd7028718c 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-23 Igor Zelmanovich <igorz@mainsoft.com>
+
+       * FormView.cs: fixed: IPostBackContainer.GetPostBackOptions method.
+
 2006-10-23 Igor Zelmanovich <igorz@mainsoft.com>
 
        * DetailsView.cs: fixed: IPostBackContainer.GetPostBackOptions method.
index 77de8efdbb06be212a2c6e7fd9750b4481fc7966..ed03c31207731e3c1f9c112ba85e548269ca42cc 100644 (file)
@@ -1462,8 +1462,17 @@ namespace System.Web.UI.WebControls
 
                PostBackOptions IPostBackContainer.GetPostBackOptions (IButtonControl control)
                {
-                       Control ctrl = control as Control;
-                       return new PostBackOptions(ctrl);
+                       if (control == null)
+                               throw new ArgumentNullException ("control");
+
+                       if (control.CausesValidation)
+                               throw new InvalidOperationException ("A button that causes validation in FormView '" + ID + "' is attempting to use the container GridView as the post back target.  The button should either turn off validation or use itself as the post back container.");
+
+                       PostBackOptions options = new PostBackOptions (this);
+                       options.Argument = control.CommandName + "$" + control.CommandArgument;
+                       options.RequiresJavaScriptProtocol = true;
+
+                       return options;
                }
 
        }
index 2da0455d671ad81ebb8fb36707d2fd405921c944..f77bc4d425b105e1b38ecc9b0ad081e7ad40aca2 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-23 Igor Zelmanovich <igorz@mainsoft.com>
+
+       * FormViewTest.cs: new tests were added
+                       
 2006-10-23 Igor Zelmanovich <igorz@mainsoft.com>
 
        * DetailsViewTest.cs: new tests were added
index cd08ac2421a3e4a9fd32afbd5757cf6f23509464..0738e80c7b047e1ea6738126a276ab63e19e6d3f 100644 (file)
@@ -1770,6 +1770,70 @@ CommandEventArgs cargs = new CommandEventArgs ("Page", "Prev");
                        Assert.IsTrue (view.CanRetrieveTotalRowCount);
                        Assert.IsTrue (arg.Equals (arg1), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = true");
                }
+
+               [Test]
+               public void FormView_GetPostBackOptions () {
+                       FormView fv = new FormView ();
+                       fv.Page = new Page ();
+                       IButtonControl btn = new Button ();
+                       btn.CausesValidation = false;
+                       Assert.IsFalse (btn.CausesValidation);
+                       Assert.AreEqual (String.Empty, btn.CommandName);
+                       Assert.AreEqual (String.Empty, btn.CommandArgument);
+                       Assert.AreEqual (String.Empty, btn.PostBackUrl);
+                       Assert.AreEqual (String.Empty, btn.ValidationGroup);
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn);
+                       Assert.IsFalse (options.PerformValidation);
+                       Assert.IsFalse (options.AutoPostBack);
+                       Assert.IsFalse (options.TrackFocus);
+                       Assert.IsTrue (options.ClientSubmit);
+                       Assert.IsTrue (options.RequiresJavaScriptProtocol);
+                       Assert.AreEqual ("$", options.Argument);
+                       Assert.AreEqual (null, options.ActionUrl);
+                       Assert.AreEqual (null, options.ValidationGroup);
+                       Assert.IsTrue (object.ReferenceEquals (options.TargetControl, fv));
+
+                       btn.ValidationGroup = "VG";
+                       btn.CommandName = "CMD";
+                       btn.CommandArgument = "ARG";
+                       btn.PostBackUrl = "Page.aspx";
+                       Assert.IsFalse (btn.CausesValidation);
+                       Assert.AreEqual ("CMD", btn.CommandName);
+                       Assert.AreEqual ("ARG", btn.CommandArgument);
+                       Assert.AreEqual ("Page.aspx", btn.PostBackUrl);
+                       Assert.AreEqual ("VG", btn.ValidationGroup);
+                       options = ((IPostBackContainer) fv).GetPostBackOptions (btn);
+                       Assert.IsFalse (options.PerformValidation);
+                       Assert.IsFalse (options.AutoPostBack);
+                       Assert.IsFalse (options.TrackFocus);
+                       Assert.IsTrue (options.ClientSubmit);
+                       Assert.IsTrue (options.RequiresJavaScriptProtocol);
+                       Assert.AreEqual ("CMD$ARG", options.Argument);
+                       Assert.AreEqual (null, options.ActionUrl);
+                       Assert.AreEqual (null, options.ValidationGroup);
+               }
+
+               [Test]
+               [ExpectedException (typeof (InvalidOperationException))]
+               public void FormView_GetPostBackOptions_CausesValidation () {
+                       FormView fv = new FormView ();
+                       fv.Page = new Page ();
+                       IButtonControl btn = new Button ();
+                       Assert.IsTrue (btn.CausesValidation);
+                       Assert.AreEqual (String.Empty, btn.CommandName);
+                       Assert.AreEqual (String.Empty, btn.CommandArgument);
+                       Assert.AreEqual (String.Empty, btn.PostBackUrl);
+                       Assert.AreEqual (String.Empty, btn.ValidationGroup);
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn);
+               }
+
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void FormView_GetPostBackOptions_Null_Argument () {
+                       FormView fv = new FormView ();
+                       fv.Page = new Page ();
+                       PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (null);
+               }
        }
 
        public class TestMyData