| File: Rendering\MvcForm.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj (Microsoft.AspNetCore.Mvc.ViewFeatures) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Encodings.Web; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers; namespace Microsoft.AspNetCore.Mvc.Rendering; /// <summary> /// An HTML form element in an MVC view. /// </summary> public class MvcForm : IDisposable { private readonly ViewContext _viewContext; private readonly HtmlEncoder _htmlEncoder; private bool _disposed; /// <summary> /// Initializes a new instance of <see cref="MvcForm"/>. /// </summary> /// <param name="viewContext">The <see cref="ViewContext"/>.</param> /// <param name="htmlEncoder">The <see cref="HtmlEncoder"/>.</param> public MvcForm(ViewContext viewContext, HtmlEncoder htmlEncoder) { ArgumentNullException.ThrowIfNull(viewContext); ArgumentNullException.ThrowIfNull(htmlEncoder); _viewContext = viewContext; _htmlEncoder = htmlEncoder; } /// <inheritdoc /> public void Dispose() { if (!_disposed) { _disposed = true; GenerateEndForm(); } } /// <summary> /// Renders the </form> end tag to the response. /// </summary> public void EndForm() { Dispose(); } /// <summary> /// Renders <see cref="ViewFeatures.FormContext.EndOfFormContent"/> and /// the </form>. /// </summary> protected virtual void GenerateEndForm() { RenderEndOfFormContent(); _viewContext.Writer.Write("</form>"); _viewContext.FormContext = new FormContext(); } private void RenderEndOfFormContent() { var formContext = _viewContext.FormContext; if (!formContext.HasEndOfFormContent) { return; } if (_viewContext.Writer is ViewBufferTextWriter viewBufferWriter) { foreach (var content in formContext.EndOfFormContent) { viewBufferWriter.Write(content); } } else { foreach (var content in formContext.EndOfFormContent) { content.WriteTo(_viewContext.Writer, _htmlEncoder); } } } }