TagHelper的下拉框
1.创建注册数据等
1)Startup.cs
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddHttpContextAccessor(); services.AddTransient<ICountryManager, CountryManager>(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStaticFiles(); app.UseMvc(); } }
2)Model
public class Country { /// <summary> /// 编码 /// </summary> public string Code { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } }
3)Data
using CoreTest.Model; using System.Collections.Generic; namespace CoreTest.Manager { public interface ICountryManager { IEnumerable<Country> GetAll(); } public class CountryManager : ICountryManager { public readonly List<Country> _countryList; public CountryManager() { _countryList = new List<Country> { new Country{ Code="001",Name="China" }, new Country{ Code="002",Name="Japan" }, new Country{ Code="003",Name="USA" }, }; } public IEnumerable<Country> GetAll() { return _countryList; } } }
4)TagHelper的下拉框控件对象
[HtmlTargetElement("country-list")] public class CountryListTagHelper:TagHelper { private readonly ICountryManager _countryManager; public string SelectedValue { get; set; } public CountryListTagHelper(ICountryManager countryManager) { _countryManager = countryManager; } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "select"; output.Content.Clear(); foreach (var item in _countryManager.GetAll()) { var selected = ""; if (SelectedValue != null && SelectedValue.Equals(item.Code, StringComparison.CurrentCultureIgnoreCase)) { selected = "selected=\"selected\""; } var listItem = $"<option value=\"{item.Code}\" {selected}>{item.Name}</option>"; output.Content.AppendHtml(listItem); } } }
5)页面上的引用
@page @model CoreTest.Pages.EditModel @addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *,CoreTest @{ } <form method="post"> <p> <label>姓名:</label> <input type="text" asp-for="@Model.Input.Name" /> </p> <p> <label>年龄:</label> <input type="number" asp-for="@Model.Input.Age" /> </p> <p> <label>性别:</label> <select asp-for="@Model.Input.Sex"></select> </p> <p> <label>电话号码:</label> <input type="text" asp-for="@Model.Input.Phone" /> </p> <p> <label>国籍:</label> <country-list selected-value="002"></country-list> </p> </form>
效果:
注:
1)Startup记得注册接口服务对象(1.1的红色部分)
2)在单独的页面上使用TagHelperHelper
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
3)使用该项目中所有的TageHelper(@addTagHelper typeName,AssemblyName)
@addTagHelper *,CoreTest
// 方式一,程序集下所有的Taghelper @addTagHelper *,CoreTest // 方式二,明确指定路径 @addTagHelper "CoreTest.CountryListTagHelper,CoreTest" // 方式三,模糊匹配 @addTagHelper "CoreTest.CountryList*,CoreTest"
感谢:https://www.cnblogs.com/hager/p/5817335.html