模型的 MVC 5 EditorTemplate 呈现相同的 ID 和名称

MVC 5 EditorTemplate for Model renders with same id and name

我有父模型 "Receipt" 并且它有对象字典作为 属性 称为 CustomControlDictionary of class CustomControlModel。 在我看来,我遍历 CustomControlDictionary 属性 中的每个对象并调用 EditorTemplate。在模板中,我只是为 CustomControlModel 对象添加标签和文本框。 当代码呈现 html 控件时,控件具有相同的 idname 属性:id="key_Value" name="key.Value"。 我确实尝试使用 regualr 数组或列表而不是字典,但结果相同。期待任何建议。

型号:

public class ReceiptModel 
{
    public ReceiptModel(){}
    public int ReceiptId { get; set; }
    public string ReceiptNumber { get; set; }
    public Dictionary<string, CustomControlModel> CustomControlDictionary{get; set; }
    // public List<CustomControlModel> CustomControlList { get; set; }
}


public class CustomControlModel 
{
    public CustomControlModel(){}
    public int CustomControlId{ get; set; }
    public string CustomControlName{ get; set; }
    public string LabelCaption{ get; set; }
    public string Value{ get; set; }
}   

查看:

//View (@ReceiptModel):
@foreach (var key in Model.CustomControlDictionary )
{
    @Html.EditorFor(m => key.Value,"CustomControlModel")
}

编辑器模板:

@model EWMS_MVC.Classes.CustomControlModel

@Html.HiddenFor(model => model.CustomControlId)
@Html.LabelFor(model => model.CustomControlId, Model.LabelCaption)
@Html.TextBoxFor(model => model.CustomControlId, new { @Value = @Model.Value })

渲染的 html 对于 ReceiptModelCustomControlDictionary 属性 中的所有对象具有相同的 idname

<input id="key_Value_CustomControlId" name="key.Value.CustomControlId" type="hidden" value="201922" />//value here should be "id" of the input field
<label for="key_Value_CustomControlId">Receipt number:</label>
<input id="key_Value_CustomControlId" name="key.Value.CustomControlId" type="text" value="201922" />//value here should be "id" of the input field

我认为针对这种情况的最佳方法是避免在模板中使用 HtmlHelper 方法,而是使用 html 控件:

@model EWMS_MVC.Classes.CustomControlModel
<label>@Model.LabelCaption</label>
<input id="@Model.CustomControlId" name="@Model.CustomControlName" type="text" value="@Model.Value" />