diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.CreateWarehouse.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.CreateWarehouse.html
new file mode 100644
index 0000000000..50de9402fd
--- /dev/null
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.CreateWarehouse.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EditWarehouse.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EditWarehouse.html
new file mode 100644
index 0000000000..6c17df4b6c
--- /dev/null
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EditWarehouse.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EmployeeList.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EmployeeList.html
new file mode 100644
index 0000000000..35b0467617
--- /dev/null
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.EmployeeList.html
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.Order.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.Order.html
index 04a01ad1f8..33456a1703 100644
--- a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.Order.html
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.Order.html
@@ -18,12 +18,9 @@
-
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.ProductList.html b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.ProductList.html
new file mode 100644
index 0000000000..80913b1e19
--- /dev/null
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/Compiler/Resources/MvcTagHelpersWebSite.MvcTagHelper_Home.ProductList.html
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/MvcTagHelpersTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/MvcTagHelpersTests.cs
index 7407bb7887..7f39fe9c82 100644
--- a/test/Microsoft.AspNet.Mvc.FunctionalTests/MvcTagHelpersTests.cs
+++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/MvcTagHelpersTests.cs
@@ -26,6 +26,14 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
[InlineData("Order", "/MvcTagHelper_Order/Submit")]
[InlineData("Product", null)]
[InlineData("Customer", "/Customer/MvcTagHelper_Customer")]
+ // Testing InputTagHelpers invoked in the partial views
+ [InlineData("ProductList", null)]
+ // Testing MvcTagHelpers invoked in the editor templates with the HTML helpers
+ [InlineData("EmployeeList", null)]
+ // Testing SelectTagHelper with Html.BeginForm
+ [InlineData("CreateWarehouse", null)]
+ // Testing the HTML helpers with FormTagHelper
+ [InlineData("EditWarehouse", null)]
public async Task MvcTagHelpers_GeneratesExpectedResults(string action, string antiForgeryPath)
{
// Arrange
diff --git a/test/WebSites/MvcTagHelpersWebSite/Controllers/MvcTagHelper_HomeController.cs b/test/WebSites/MvcTagHelpersWebSite/Controllers/MvcTagHelper_HomeController.cs
index bd0dad40de..e40e39a30f 100644
--- a/test/WebSites/MvcTagHelpersWebSite/Controllers/MvcTagHelper_HomeController.cs
+++ b/test/WebSites/MvcTagHelpersWebSite/Controllers/MvcTagHelper_HomeController.cs
@@ -12,27 +12,37 @@ namespace MvcTagHelpersWebSite.Controllers
{
public class MvcTagHelper_HomeController : Controller
{
+ private readonly List
_products = new List();
+
+ public MvcTagHelper_HomeController()
+ {
+ _products.Add(new Product
+ {
+ ProductName = "Product_0",
+ Number = 0,
+ HomePage = new Uri("http://www.contoso.com")
+ });
+ _products.Add(new Product
+ {
+ ProductName = "Product_1",
+ Number = 1,
+ });
+ _products.Add(new Product
+ {
+ ProductName = "Product_2",
+ Number = 2,
+ Description = "Product_2 desription"
+ });
+ }
+
public IActionResult Order()
{
- var products = new List();
- products = new List();
+ ViewBag.Items = new SelectList(_products, "Number", "ProductName", 2);
- for (int i = 7; i < 13; ++i)
- {
- products.Add(new Product()
- {
- ProductName = "Product_" + i,
- Number = i,
- PartNumbers = Enumerable.Range(1, 3).Select(n => string.Format("{0}-{1}", i, n))
- });
- }
-
- ViewBag.Items = new SelectList(products, "Number", "ProductName", 9);
-
- var order = new Order()
+ var order = new Order
{
Shipping = "UPSP",
- Customer = new Customer()
+ Customer = new Customer
{
Key = "KeyA",
Number = 1,
@@ -48,7 +58,7 @@ namespace MvcTagHelpersWebSite.Controllers
public IActionResult Product()
{
- var product = new Product()
+ var product = new Product
{
HomePage = new System.Uri("http://www.contoso.com"),
Description = "Type the product description"
@@ -70,5 +80,61 @@ namespace MvcTagHelpersWebSite.Controllers
{
return View();
}
+
+ public IActionResult ProductList()
+ {
+ return View(_products);
+ }
+
+ public IActionResult EmployeeList()
+ {
+ var employees = new List();
+
+ employees.Add(new Employee
+ {
+ Name = "EmployeeName_0",
+ Number = 0,
+ Address = "Employee_0 address"
+ });
+ employees.Add(new Employee
+ {
+ Name = "EmployeeName_1",
+ Number = 1,
+ OfficeNumber = "1002",
+ Gender = Gender.Female
+ });
+ employees.Add(new Employee
+ {
+ Name = "EmployeeName_2",
+ Number = 2,
+ Remote = true
+ });
+
+ return View(employees);
+ }
+
+ public IActionResult CreateWarehouse()
+ {
+ ViewBag.Items = new SelectList(_products, "Number", "ProductName", 9);
+
+ return View();
+ }
+
+ public IActionResult EditWarehouse()
+ {
+ var warehouse = new Warehouse
+ {
+ City = "City_1",
+ Employee = new Employee
+ {
+ Name = "EmployeeName_1",
+ Number = 1,
+ Address = "Address_1",
+ PhoneNumber = "PhoneNumber_1",
+ Gender = Gender.Female
+ }
+ };
+ return View(warehouse);
+ }
}
}
diff --git a/test/WebSites/MvcTagHelpersWebSite/Models/Customer.cs b/test/WebSites/MvcTagHelpersWebSite/Models/Customer.cs
index 682b2a0c23..77fc33d17d 100644
--- a/test/WebSites/MvcTagHelpersWebSite/Models/Customer.cs
+++ b/test/WebSites/MvcTagHelpersWebSite/Models/Customer.cs
@@ -1,56 +1,14 @@
// 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.ComponentModel.DataAnnotations;
-
namespace MvcTagHelpersWebSite.Models
{
- public class Customer
+ public class Customer : Person
{
- [Range(1, 100)]
- public int Number
- {
- get;
- set;
- }
-
public string Key
{
get;
set;
}
-
- public string Name
- {
- get;
- set;
- }
-
- [Required]
- public string Password
- {
- get;
- set;
- }
-
- [EnumDataType(typeof(Gender))]
- public Gender Gender
- {
- get;
- set;
- }
-
- public string PhoneNumber
- {
- get;
- set;
- }
-
- [DataType(DataType.EmailAddress)]
- public string Email
- {
- get;
- set;
- }
}
}
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Models/Employee.cs b/test/WebSites/MvcTagHelpersWebSite/Models/Employee.cs
new file mode 100644
index 0000000000..3c2364e9c4
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Models/Employee.cs
@@ -0,0 +1,26 @@
+// 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.
+
+namespace MvcTagHelpersWebSite.Models
+{
+ public class Employee : Person
+ {
+ public string Address
+ {
+ get;
+ set;
+ }
+
+ public string OfficeNumber
+ {
+ get;
+ set;
+ }
+
+ public bool Remote
+ {
+ get;
+ set;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Models/Person.cs b/test/WebSites/MvcTagHelpersWebSite/Models/Person.cs
new file mode 100644
index 0000000000..1718fe9913
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Models/Person.cs
@@ -0,0 +1,50 @@
+// 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.ComponentModel.DataAnnotations;
+
+namespace MvcTagHelpersWebSite.Models
+{
+ public class Person
+ {
+ [Range(1, 100)]
+ public int Number
+ {
+ get;
+ set;
+ }
+
+ public string Name
+ {
+ get;
+ set;
+ }
+
+ [Required]
+ public string Password
+ {
+ get;
+ set;
+ }
+
+ [EnumDataType(typeof(Gender))]
+ public Gender Gender
+ {
+ get;
+ set;
+ }
+
+ public string PhoneNumber
+ {
+ get;
+ set;
+ }
+
+ [DataType(DataType.EmailAddress)]
+ public string Email
+ {
+ get;
+ set;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Models/Product.cs b/test/WebSites/MvcTagHelpersWebSite/Models/Product.cs
index bdf4db8030..818f4667e5 100644
--- a/test/WebSites/MvcTagHelpersWebSite/Models/Product.cs
+++ b/test/WebSites/MvcTagHelpersWebSite/Models/Product.cs
@@ -28,12 +28,6 @@ namespace MvcTagHelpersWebSite.Models
set;
}
- public IEnumerable PartNumbers
- {
- get;
- set;
- }
-
public Uri HomePage
{
get;
diff --git a/test/WebSites/MvcTagHelpersWebSite/Models/Warehouse.cs b/test/WebSites/MvcTagHelpersWebSite/Models/Warehouse.cs
new file mode 100644
index 0000000000..91171edb78
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Models/Warehouse.cs
@@ -0,0 +1,30 @@
+// 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.ComponentModel.DataAnnotations;
+
+namespace MvcTagHelpersWebSite.Models
+{
+ public class Warehouse
+ {
+ [MinLength(2)]
+ public string City
+ {
+ get;
+ set;
+ }
+
+ [Range(1, 100)]
+ public int Product
+ {
+ get;
+ set;
+ }
+
+ public Employee Employee
+ {
+ get;
+ set;
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/CreateWarehouse.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/CreateWarehouse.cshtml
new file mode 100644
index 0000000000..8e2063b18d
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/CreateWarehouse.cshtml
@@ -0,0 +1,27 @@
+@model MvcTagHelpersWebSite.Models.Warehouse
+
+@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
+
+@{
+ ViewBag.Title = "Warehouse - Product";
+}
+
+
+
+ @using (Html.BeginForm("CreateWarehouse", "MvcTagHelper_Home"))
+ {
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditWarehouse.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditWarehouse.cshtml
new file mode 100644
index 0000000000..6cebd04dbe
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditWarehouse.cshtml
@@ -0,0 +1,50 @@
+@model MvcTagHelpersWebSite.Models.Warehouse
+
+@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
+
+@{
+ ViewBag.Title = "Warehouse - Employee";
+}
+
+
+
+
+
+
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditorTemplates/Employee.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditorTemplates/Employee.cshtml
new file mode 100644
index 0000000000..f3aa2f1c9b
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EditorTemplates/Employee.cshtml
@@ -0,0 +1,35 @@
+@model MvcTagHelpersWebSite.Models.Employee
+
+@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
+
+
+ @Html.LabelFor(m => m.Number)
+ @Html.TextBoxFor(m => m.Number, htmlAttributes: new { disabled = "disabled", @readonly= "readonly" })
+
+
+
+
+ @Html.TextAreaFor(m => m.Name)
+
+
+
+
+
+
+ @{
+ var genders = new SelectList(new string[] { "Male", "Female" });
+ }
+
+
+
+
+
+ @Html.CheckBoxFor(m=>m.Remote)
+
+
+
+ @{
+ var offices = new SelectList(new string[] {"1001","1002"});
+ }
+ @Html.DropDownListFor(m => m.OfficeNumber, offices)
+
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EmployeeList.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EmployeeList.cshtml
new file mode 100644
index 0000000000..e2c76b0487
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/EmployeeList.cshtml
@@ -0,0 +1,23 @@
+@using MvcTagHelpersWebSite.Models
+
+@model List
+
+@{
+ ViewBag.Title = "Employee Page";
+}
+
+
+
+ @if (Model != null && Model.Count() != 0)
+ {
+ @using (@Html.BeginForm("EmployeeList", "MvcTagHelper_Home", FormMethod.Post))
+ {
+ @for (int i = 0; i < Model.Count; ++i)
+ {
+ @Html.EditorFor(m => m[i])
+ }
+
+ }
+ }
+
+
\ No newline at end of file
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/ProductList.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/ProductList.cshtml
new file mode 100644
index 0000000000..49543dcd0f
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/ProductList.cshtml
@@ -0,0 +1,20 @@
+@using MvcTagHelpersWebSite.Models
+@model IEnumerable
+
+@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
+
+
+
+
+
+
+ @using (@Html.BeginForm("Index", "MvcTagHelper_Product", FormMethod.Post))
+ {
+ @foreach (var product in Model)
+ {
+ @await Html.PartialAsync("_ProductPartial", product)
+ }
+
+ }
+
+
diff --git a/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/_ProductPartial.cshtml b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/_ProductPartial.cshtml
new file mode 100644
index 0000000000..2f658947eb
--- /dev/null
+++ b/test/WebSites/MvcTagHelpersWebSite/Views/MvcTagHelper_Home/_ProductPartial.cshtml
@@ -0,0 +1,20 @@
+@model MvcTagHelpersWebSite.Models.Product
+
+@addtaghelper "Microsoft.AspNet.Mvc.TagHelpers"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file