aspnetcore/src/Microsoft.AspNet.Mvc.Core/ViewContext.cs

112 lines
3.7 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.IO;
using Microsoft.AspNet.Mvc.Rendering;
namespace Microsoft.AspNet.Mvc
{
public class ViewContext : ActionContext
{
// We need a default FormContext if the user uses html <form> instead of an MvcForm
private readonly FormContext _defaultFormContext = new FormContext();
private FormContext _formContext;
private DynamicViewData _viewBag;
public ViewContext(
[NotNull] ActionContext actionContext,
[NotNull] IView view,
[NotNull] ViewDataDictionary viewData,
[NotNull] TextWriter writer)
: base(actionContext)
{
View = view;
ViewData = viewData;
Writer = writer;
_formContext = _defaultFormContext;
ClientValidationEnabled = true;
ValidationSummaryMessageElement = "span";
ValidationMessageElement = "span";
}
public ViewContext(
[NotNull] ViewContext viewContext,
[NotNull] IView view,
[NotNull] ViewDataDictionary viewData,
[NotNull] TextWriter writer)
: base(viewContext)
{
_formContext = viewContext.FormContext;
ClientValidationEnabled = viewContext.ClientValidationEnabled;
Html5DateRenderingMode = viewContext.Html5DateRenderingMode;
ValidationSummaryMessageElement = viewContext.ValidationSummaryMessageElement;
ValidationMessageElement = viewContext.ValidationMessageElement;
View = view;
ViewData = viewData;
Writer = writer;
}
public virtual FormContext FormContext
{
get
{
return _formContext;
}
set
{
// Never return a null form context, this is important for validation purposes.
_formContext = value ?? _defaultFormContext;
}
}
public bool ClientValidationEnabled { get; set; }
/// <summary>
/// Set this property to <see cref="Html5DateRenderingMode.Rfc3339" /> to have templated helpers such as
/// <see cref="IHtmlHelper.Editor" /> and <see cref="IHtmlHelper{TModel}.EditorFor" /> render date and time
/// values as RFC 3339 compliant strings. By default these helpers render dates and times using the current
/// culture.
/// </summary>
public Html5DateRenderingMode Html5DateRenderingMode { get; set; }
/// <summary>
/// Element name used to wrap a top-level message generated by <see cref="IHtmlHelper.ValidationSummary"/> and
/// other overloads.
/// </summary>
public string ValidationSummaryMessageElement { get; set; }
/// <summary>
/// Element name used to wrap a top-level message generated by <see cref="IHtmlHelper.ValidationMessage"/> and
/// other overloads.
/// </summary>
public string ValidationMessageElement { get; set; }
public dynamic ViewBag
{
get
{
if (_viewBag == null)
{
_viewBag = new DynamicViewData(() => ViewData);
}
return _viewBag;
}
}
public IView View { get; set; }
public ViewDataDictionary ViewData { get; set; }
public TextWriter Writer { get; set; }
public FormContext GetFormContextForClientValidation()
{
return (ClientValidationEnabled) ? FormContext : null;
}
}
}