[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;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -281,13 +281,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
format = GetFormat(modelExplorer, inputTypeHint, inputType);
|
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))
|
if (string.Equals(inputType, "file") && string.Equals(inputTypeHint, TemplateRenderer.IEnumerableOfIFormFileName))
|
||||||
{
|
{
|
||||||
htmlAttributes = new Dictionary<string, object>
|
htmlAttributes["multiple"] = "multiple";
|
||||||
{
|
|
||||||
{ "multiple", "multiple" }
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Generator.GenerateTextBox(
|
return Generator.GenerateTextBox(
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,16 @@
|
||||||
|
|
||||||
<h2>Input Tag Helper Test</h2>
|
<h2>Input Tag Helper Test</h2>
|
||||||
|
|
||||||
<input name="InterfaceFile" type="file" id="InterfaceFile" value="" />
|
<input name="InterfaceFile" type="file" id="InterfaceFile" />
|
||||||
<input name="InterfaceFiles" type="file" id="InterfaceFiles" multiple="multiple" value="" />
|
<input name="InterfaceFiles" type="file" id="InterfaceFiles" multiple="multiple" />
|
||||||
<input name="ConcreteFile" type="file" id="ConcreteFile" value="" />
|
<input name="ConcreteFile" type="file" id="ConcreteFile" />
|
||||||
<input name="ConcreteFiles" type="file" id="ConcreteFiles" multiple="multiple" value="" />
|
<input name="ConcreteFiles" type="file" id="ConcreteFiles" multiple="multiple" />
|
||||||
<input name="EnumerableFiles" type="file" id="EnumerableFiles" multiple="multiple" value="" />
|
<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="InterfaceFile" name="InterfaceFile" type="file" />
|
||||||
<input class="text-box single-line" id="InterfaceFiles" multiple="multiple" name="InterfaceFiles" type="file" value="" />
|
<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" value="" />
|
<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" value="" />
|
<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" value="" />
|
<input class="text-box single-line" id="EnumerableFiles" multiple="multiple" name="EnumerableFiles" type="file" />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -623,6 +623,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
[InlineData("TEXT", null, "not-null")]
|
[InlineData("TEXT", null, "not-null")]
|
||||||
[InlineData("custom-datatype", null, null)]
|
[InlineData("custom-datatype", null, null)]
|
||||||
[InlineData(null, "unknown-input-type", "not-null")]
|
[InlineData(null, "unknown-input-type", "not-null")]
|
||||||
|
[InlineData("Image", null, "not-null")]
|
||||||
|
[InlineData(null, "image", "not-null")]
|
||||||
public async Task ProcessAsync_CallsGenerateTextBox_WithExpectedParameters(
|
public async Task ProcessAsync_CallsGenerateTextBox_WithExpectedParameters(
|
||||||
string dataTypeName,
|
string dataTypeName,
|
||||||
string inputTypeName,
|
string inputTypeName,
|
||||||
|
|
@ -695,7 +697,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
tagHelper.For.Name,
|
tagHelper.For.Name,
|
||||||
model, // value
|
model, // value
|
||||||
null, // format
|
null, // format
|
||||||
null)) // htmlAttributes
|
It.Is<Dictionary<string, object>>(m => m.ContainsKey("type")))) // htmlAttributes
|
||||||
.Returns(tagBuilder)
|
.Returns(tagBuilder)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
|
@ -791,13 +793,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
|
|
||||||
var tagBuilder = new TagBuilder("input", new NullTestEncoder());
|
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))
|
if (string.Equals(dataTypeName, TemplateRenderer.IEnumerableOfIFormFileName))
|
||||||
{
|
{
|
||||||
htmlAttributes = new Dictionary<string, object>
|
htmlAttributes["multiple"] = "multiple";
|
||||||
{
|
|
||||||
{ "multiple", "multiple" }
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
htmlGenerator
|
htmlGenerator
|
||||||
.Setup(mock => mock.GenerateTextBox(
|
.Setup(mock => mock.GenerateTextBox(
|
||||||
|
|
@ -860,6 +862,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
SelfClosing = true,
|
SelfClosing = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var htmlAttributes = new Dictionary<string, object>
|
||||||
|
{
|
||||||
|
{ "type", expectedType }
|
||||||
|
};
|
||||||
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
|
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
|
||||||
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
var htmlGenerator = new Mock<IHtmlGenerator>(MockBehavior.Strict);
|
||||||
var tagHelper = GetTagHelper(
|
var tagHelper = GetTagHelper(
|
||||||
|
|
@ -877,7 +883,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
|
||||||
tagHelper.For.Name,
|
tagHelper.For.Name,
|
||||||
null, // value
|
null, // value
|
||||||
expectedFormat,
|
expectedFormat,
|
||||||
null)) // htmlAttributes
|
htmlAttributes)) // htmlAttributes
|
||||||
.Returns(tagBuilder)
|
.Returns(tagBuilder)
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue