[Fixes #2336] Generate some input elements without value attribute
This commit is contained in:
parent
0a1918acac
commit
89ebce0289
|
|
@ -1024,7 +1024,23 @@ namespace Microsoft.AspNet.Mvc.Rendering
|
|||
attributeValue = useViewData ? EvalString(viewContext, fullName, format) : valueParameter;
|
||||
}
|
||||
|
||||
tagBuilder.MergeAttribute("value", attributeValue, replaceExisting: isExplicitValue);
|
||||
var addValue = true;
|
||||
object typeAttributeValue;
|
||||
if (htmlAttributes != null && htmlAttributes.TryGetValue("type", out typeAttributeValue))
|
||||
{
|
||||
if (string.Equals(typeAttributeValue.ToString(), "file", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(typeAttributeValue.ToString(), "image", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// 'value' attribute is not needed for 'file' and 'image' input types.
|
||||
addValue = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (addValue)
|
||||
{
|
||||
tagBuilder.MergeAttribute("value", attributeValue, replaceExisting: isExplicitValue);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -281,13 +281,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
format = GetFormat(modelExplorer, inputTypeHint, inputType);
|
||||
}
|
||||
|
||||
object htmlAttributes = null;
|
||||
var htmlAttributes = new Dictionary<string, object>
|
||||
{
|
||||
{ "type", inputType }
|
||||
};
|
||||
|
||||
if (string.Equals(inputType, "file") && string.Equals(inputTypeHint, TemplateRenderer.IEnumerableOfIFormFileName))
|
||||
{
|
||||
htmlAttributes = new Dictionary<string, object>
|
||||
{
|
||||
{ "multiple", "multiple" }
|
||||
};
|
||||
htmlAttributes["multiple"] = "multiple";
|
||||
}
|
||||
|
||||
return Generator.GenerateTextBox(
|
||||
|
|
|
|||
|
|
@ -7,16 +7,16 @@
|
|||
|
||||
<h2>Input Tag Helper Test</h2>
|
||||
|
||||
<input name="InterfaceFile" type="file" id="InterfaceFile" value="" />
|
||||
<input name="InterfaceFiles" type="file" id="InterfaceFiles" multiple="multiple" value="" />
|
||||
<input name="ConcreteFile" type="file" id="ConcreteFile" value="" />
|
||||
<input name="ConcreteFiles" type="file" id="ConcreteFiles" multiple="multiple" value="" />
|
||||
<input name="EnumerableFiles" type="file" id="EnumerableFiles" multiple="multiple" value="" />
|
||||
<input name="InterfaceFile" type="file" id="InterfaceFile" />
|
||||
<input name="InterfaceFiles" type="file" id="InterfaceFiles" multiple="multiple" />
|
||||
<input name="ConcreteFile" type="file" id="ConcreteFile" />
|
||||
<input name="ConcreteFiles" type="file" id="ConcreteFiles" multiple="multiple" />
|
||||
<input name="EnumerableFiles" type="file" id="EnumerableFiles" multiple="multiple" />
|
||||
|
||||
<input class="text-box single-line" id="InterfaceFile" name="InterfaceFile" type="file" value="" />
|
||||
<input class="text-box single-line" id="InterfaceFiles" multiple="multiple" name="InterfaceFiles" type="file" value="" />
|
||||
<input class="text-box single-line" id="ConcreteFile" name="ConcreteFile" type="file" value="" />
|
||||
<input class="text-box single-line" id="ConcreteFiles" multiple="multiple" name="ConcreteFiles" type="file" value="" />
|
||||
<input class="text-box single-line" id="EnumerableFiles" multiple="multiple" name="EnumerableFiles" type="file" value="" />
|
||||
<input class="text-box single-line" id="InterfaceFile" name="InterfaceFile" type="file" />
|
||||
<input class="text-box single-line" id="InterfaceFiles" multiple="multiple" name="InterfaceFiles" type="file" />
|
||||
<input class="text-box single-line" id="ConcreteFile" name="ConcreteFile" type="file" />
|
||||
<input class="text-box single-line" id="ConcreteFiles" multiple="multiple" name="ConcreteFiles" type="file" />
|
||||
<input class="text-box single-line" id="EnumerableFiles" multiple="multiple" name="EnumerableFiles" type="file" />
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -623,6 +623,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
[InlineData("TEXT", null, "not-null")]
|
||||
[InlineData("custom-datatype", null, null)]
|
||||
[InlineData(null, "unknown-input-type", "not-null")]
|
||||
[InlineData("Image", null, "not-null")]
|
||||
[InlineData(null, "image", "not-null")]
|
||||
public async Task ProcessAsync_CallsGenerateTextBox_WithExpectedParameters(
|
||||
string dataTypeName,
|
||||
string inputTypeName,
|
||||
|
|
@ -695,7 +697,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
tagHelper.For.Name,
|
||||
model, // value
|
||||
null, // format
|
||||
null)) // htmlAttributes
|
||||
It.Is<Dictionary<string, object>>(m => m.ContainsKey("type")))) // htmlAttributes
|
||||
.Returns(tagBuilder)
|
||||
.Verifiable();
|
||||
|
||||
|
|
@ -791,13 +793,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
|
||||
var tagBuilder = new TagBuilder("input", new NullTestEncoder());
|
||||
|
||||
Dictionary<string, object> htmlAttributes = null;
|
||||
var htmlAttributes = new Dictionary<string, object>
|
||||
{
|
||||
{ "type", expectedType }
|
||||
};
|
||||
if (string.Equals(dataTypeName, TemplateRenderer.IEnumerableOfIFormFileName))
|
||||
{
|
||||
htmlAttributes = new Dictionary<string, object>
|
||||
{
|
||||
{ "multiple", "multiple" }
|
||||
};
|
||||
htmlAttributes["multiple"] = "multiple";
|
||||
}
|
||||
htmlGenerator
|
||||
.Setup(mock => mock.GenerateTextBox(
|
||||
|
|
@ -860,6 +862,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
SelfClosing = true,
|
||||
};
|
||||
|
||||
var htmlAttributes = new Dictionary<string, object>
|
||||
{
|
||||
{ "type", expectedType }
|
||||
};
|
||||
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
|
||||
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||
var tagHelper = GetTagHelper(
|
||||
|
|
@ -877,7 +883,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
|||
tagHelper.For.Name,
|
||||
null, // value
|
||||
expectedFormat,
|
||||
null)) // htmlAttributes
|
||||
htmlAttributes)) // htmlAttributes
|
||||
.Returns(tagBuilder)
|
||||
.Verifiable();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue