在ASP.NET Core中创建自定义编辑器

时间:2017-09-03 23:55:24

标签: asp.net asp.net-core mvc-editor-templates

我需要一些建议。我想为特定的对象类型dll实现我自己的自定义编辑器。我首先阅读了.NET Core网站上的Tag Helpers文档,然后阅读了Core站点上的View Components,并且从我的确切场景开始都没有。

我有一个模型Address

Address

我想创建一个自定义编辑器模板,标记帮助器或视图组件,这样我就可以做这样的事情(在我的“编辑”视图中):

public class Address
{
    public Guid Id { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string StateCode { get; set; }
    public string PostalCode { get; set; }
}

我希望HTML能够像这样呈现:

编辑客户

@model TestApplication.Models.Customer

<h2>Edit Customer</h2>

<form asp-action="Edit">
    <div class="form-horizontal">
    <h4>Edit Customer</h4>
    <hr />
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <input type="hidden" asp-for="Id" />
    <div class="form-group">
        <label asp-for="Name" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>
    </div>
    <address-editor asp-for="HomeAddress" />
    <address-editor asp-for="WorkAddress" />
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</form>

通过查看编辑器模板,我是否正确的方向?如果是这样,我如何使用Model.PropertyName(即HomeAddress_)为控件名称添加前缀?

1 个答案:

答案 0 :(得分:1)

我相信我的回答是通过研究视图组件来实现的。我本可以走标签帮助器,视图组件或编辑器模板的方向。我决定使用视图组件,并且需要知道如何将整个模型信息传递到视图组件中,version 3.3帮助我实现了这一目标。我遇到(或问题)的问题是我需要了解this question。该类包含我需要的所有内容(名称和型号),因此我可以执行以下操作:

<vc:address-editor asp-for="@Model.HomeAddress"></vc:address-editor>

然后,在我的AddressEditor ViewComponent中,我只使用了我需要的两个属性:

 public IViewComponentResult Invoke(ModelExpression aspFor)
 {
     ViewBag.AspFor = aspFor.Name;

     return View(aspFor.Model);
 }