Adding Value Html Helpers
This commit is contained in:
parent
42561f14d3
commit
49de9d2828
|
|
@ -71,6 +71,9 @@
|
||||||
<td>
|
<td>
|
||||||
'@Html.NameForModel()'
|
'@Html.NameForModel()'
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
'@Html.ValueForModel()'
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
@ -79,6 +82,9 @@
|
||||||
<td>
|
<td>
|
||||||
'@Html.Name("Name")'
|
'@Html.Name("Name")'
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
'@Html.Value("Name")'
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
@ -87,6 +93,9 @@
|
||||||
<td>
|
<td>
|
||||||
'@Html.NameFor(m => m.Address)'
|
'@Html.NameFor(m => m.Address)'
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
'@Html.ValueFor(m => m.Address)'
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
@ -95,6 +104,9 @@
|
||||||
<td>
|
<td>
|
||||||
'@Html.Name("Anon.Address.Street")'
|
'@Html.Name("Anon.Address.Street")'
|
||||||
</td>
|
</td>
|
||||||
|
<td>
|
||||||
|
'@Html.Value("Anon.Address.Street")'
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Abstractions;
|
using Microsoft.AspNet.Abstractions;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.AspNet.Mvc.Rendering.Expressions;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
{
|
{
|
||||||
|
|
@ -300,6 +301,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
htmlAttributes: htmlAttributes);
|
htmlAttributes: htmlAttributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HtmlString Value([NotNull] string name, string format)
|
||||||
|
{
|
||||||
|
return GenerateValue(name, value: null, format: format, useViewData: true);
|
||||||
|
}
|
||||||
|
|
||||||
protected string EvalString(string key, string format)
|
protected string EvalString(string key, string format)
|
||||||
{
|
{
|
||||||
return Convert.ToString(ViewData.Eval(key, format), CultureInfo.CurrentCulture);
|
return Convert.ToString(ViewData.Eval(key, format), CultureInfo.CurrentCulture);
|
||||||
|
|
@ -394,6 +400,42 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
return tagBuilder.ToHtmlString(TagRenderMode.SelfClosing);
|
return tagBuilder.ToHtmlString(TagRenderMode.SelfClosing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected virtual HtmlString GenerateValue(string name, object value, string format, bool useViewData)
|
||||||
|
{
|
||||||
|
var fullName = ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
|
||||||
|
var attemptedValue = (string)GetModelStateValue(fullName, typeof(string));
|
||||||
|
|
||||||
|
string resolvedValue;
|
||||||
|
if (attemptedValue != null)
|
||||||
|
{
|
||||||
|
// case 1: if ModelState has a value then it's already formatted so ignore format string
|
||||||
|
resolvedValue = attemptedValue;
|
||||||
|
}
|
||||||
|
else if (useViewData)
|
||||||
|
{
|
||||||
|
if (name.Length == 0)
|
||||||
|
{
|
||||||
|
// case 2(a): format the value from ModelMetadata for the current model
|
||||||
|
var metadata = ViewData.ModelMetadata;
|
||||||
|
resolvedValue = FormatValue(metadata.Model, format);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// case 2(b): format the value from ViewData
|
||||||
|
resolvedValue = EvalString(name, format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// case 3: format the explicit value from ModelMetadata
|
||||||
|
resolvedValue = FormatValue(value, format);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new HtmlString(Encode(resolvedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static string GetInputTypeString(InputType inputType)
|
private static string GetInputTypeString(InputType inputType)
|
||||||
{
|
{
|
||||||
switch (inputType)
|
switch (inputType)
|
||||||
|
|
|
||||||
|
|
@ -72,5 +72,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
|
|
||||||
return metadata;
|
return metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HtmlString ValueFor<TProperty>(Expression<Func<TModel, TProperty>> expression, string format)
|
||||||
|
{
|
||||||
|
var metadata = GetModelMetadata(expression);
|
||||||
|
return GenerateValue(ExpressionHelper.GetExpressionText(expression), metadata.Model, format, useViewData: false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
|
{
|
||||||
|
public static class HtmlHelperValueExtensions
|
||||||
|
{
|
||||||
|
public static HtmlString Value<TModel>([NotNull] this IHtmlHelper<TModel> htmlHelper, string name)
|
||||||
|
{
|
||||||
|
return htmlHelper.Value(name, format: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlString ValueFor<TModel, TProperty>([NotNull] this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
|
||||||
|
{
|
||||||
|
return htmlHelper.ValueFor(expression, format: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlString ValueForModel<TModel>([NotNull] this IHtmlHelper<TModel> htmlHelper)
|
||||||
|
{
|
||||||
|
return ValueForModel<TModel>(htmlHelper, format: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HtmlString ValueForModel<TModel>([NotNull] this IHtmlHelper<TModel> htmlHelper, string format)
|
||||||
|
{
|
||||||
|
return htmlHelper.Value(string.Empty, format);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -130,7 +130,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <returns>New <see cref="HtmlString"/> containing the rendered HTML.</returns>
|
/// <returns>New <see cref="HtmlString"/> containing the rendered HTML.</returns>
|
||||||
HtmlString TextBoxFor<TProperty>([NotNull] Expression<Func<TModel, TProperty>> expression, string format,
|
HtmlString TextBoxFor<TProperty>([NotNull] Expression<Func<TModel, TProperty>> expression, string format,
|
||||||
IDictionary<string, object> htmlAttributes);
|
IDictionary<string, object> htmlAttributes);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns an unordered list (ul element) of validation messages that are in the
|
/// Returns an unordered list (ul element) of validation messages that are in the
|
||||||
|
|
@ -144,5 +144,21 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
||||||
/// </returns>
|
/// </returns>
|
||||||
HtmlString ValidationSummary(bool excludePropertyErrors, string message,
|
HtmlString ValidationSummary(bool excludePropertyErrors, string message,
|
||||||
IDictionary<string, object> htmlAttributes);
|
IDictionary<string, object> htmlAttributes);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the model value for the given expression <paramref name="name"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">Name of an expression, relative to the current model.</param>
|
||||||
|
/// <param name="format">The optional format string to apply to the value.</param>
|
||||||
|
/// <returns>An <see cref="HtmlString"/> that represents HTML markup.</returns>
|
||||||
|
HtmlString Value([NotNull] string name, string format);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the model value for the given expression <paramref name="expression"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="expression">An expression, relative to the current model.</param>
|
||||||
|
/// <param name="format">The optional format string to apply to the value.</param>
|
||||||
|
/// <returns>An <see cref="HtmlString"/> that represents HTML markup.</returns>
|
||||||
|
HtmlString ValueFor<TProperty>([NotNull] Expression<Func<TModel, TProperty>> expression, string format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue