1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
namespace System.Web.Mvc.Html {
using System;
using System.IO;
public class MvcForm : IDisposable {
private bool _disposed;
private readonly FormContext _originalFormContext;
private readonly ViewContext _viewContext;
private readonly TextWriter _writer;
[Obsolete("The recommended alternative is the constructor MvcForm(ViewContext viewContext).", true /* error */)]
public MvcForm(HttpResponseBase httpResponse) {
if (httpResponse == null) {
throw new ArgumentNullException("httpResponse");
}
_writer = httpResponse.Output;
}
public MvcForm(ViewContext viewContext) {
if (viewContext == null) {
throw new ArgumentNullException("viewContext");
}
_viewContext = viewContext;
_writer = viewContext.Writer;
// push the new FormContext
_originalFormContext = viewContext.FormContext;
viewContext.FormContext = new FormContext();
}
public void Dispose() {
Dispose(true /* disposing */);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (!_disposed) {
_disposed = true;
_writer.Write("</form>");
// output client validation and restore the original form context
if (_viewContext != null) {
_viewContext.OutputClientValidation();
_viewContext.FormContext = _originalFormContext;
}
}
}
public void EndForm() {
Dispose(true);
}
}
}
|