如何允许用户使用@ Html.EditorForModel将项目添加到列表?

时间:2019-12-08 22:27:36

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

我有一个名为Parameters的类。

    public class Parameters
    {
        public string Name { get; set; }

        //other properties

        public List<LatLong> Coordinates { get; set; }
    }

LatLong是这样的:

    public class LatLong
    {
        public double Latitude { get; set; }
        public double Longitude { get; set; }
    }

在前端,我具有以下用于创建新的Parameters类的形式。

            @model Parameters
            @using (Html.BeginForm("Index", "Home", FormMethod.Post))
            {
                @Html.EditorForModel()
            }

我有一个用于列表的EditorTemplate: 视图/共享/EditorTemplates/LatLongList.cshtml

@model List<LatLong>
@foreach (var ll in Model)
{
    @Html.EditorForModel()
}

和LatLong的EditorTemplate: 视图/共享/EditorTemplates/LatLong.cshtml

@model LatLng
@Html.EditorFor(model => model.Latitude)
@Html.EditorFor(model => model.Longitude)

但是,什么都没有出现。

如何允许用户输入他们想要的任意多个坐标?

1 个答案:

答案 0 :(得分:0)

这是一个可行的示例,您可以参考

主视图:

@model MVC3_0.Models.ParameterModel.Parameters

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
   @Html.EditorForModel("AddParameter")
}

AddParameter的EditorTemplate:视图/共享/EditorTemplates/AddParameter.cshtml

@model MVC3_0.Models.ParameterModel.Parameters

<div>
<div>
    <label> Name:</label>
    @Html.TextBoxFor(x => x.Name)
</div>
<div>
    <label>Count:</label>
    @Html.TextBoxFor(x => x.Count)
</div>

<div>
    <label>Coordinates:</label>

    //Editor Template for LatLongList
    @Html.EditorFor(x => x.Coordinates)
</div>
</div>

LatLong的EditorTemplate:Views / Shared / EditorTemplates / LatLong.cshtml, EditorFor会为您遍历集合

@model MVC3_0.Models.ParameterModel.LatLong
<div>
    <label>Latitude:</label>
    @Html.TextBoxFor(model => model.Latitude)
</div>
<div>
    <label>Longitude:</label>
    @Html.TextBoxFor(model => model.Longitude)
</div>

参考:

How should I call `EditorForModel` with its parameters?

https://forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel