C# 带有动态字段的ASP.NET MVC表单

C# 带有动态字段的ASP.NET MVC表单,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,问题 我想显示一个具有可变数量值的窗体。但是,每个表单项都必须有一种与之关联的键。例如,表单生成名称、用户名和职业字段,我还需要生成密钥,以便在提交表单时,接收者方法可以判断哪些项目是什么 尝试的解决方案 现在我有一个FieldItems列表,其中一个FieldItem只是一个类,带有一个字符串的类变量。该解决方案在填充表单时有效,但是在提交时会返回一个列表,我无法判断哪个值属于哪个键。我在考虑使用字典,但我不知道如何在razor中实现这一点 查看模型 public class BuildRep

问题

我想显示一个具有可变数量值的窗体。但是,每个表单项都必须有一种与之关联的键。例如,表单生成名称、用户名和职业字段,我还需要生成密钥,以便在提交表单时,接收者方法可以判断哪些项目是什么

尝试的解决方案

现在我有一个FieldItems列表,其中一个FieldItem只是一个类,带有一个字符串的类变量。该解决方案在填充表单时有效,但是在提交时会返回一个列表,我无法判断哪个值属于哪个键。我在考虑使用字典,但我不知道如何在razor中实现这一点

查看模型

public class BuildReportViewModel
{
    public IList<BuildReportFieldItemViewModel> Fields { get; set; }
}
public class BuildReportFieldItemViewModel
{
    public string Field { get; set; }
}
@model BuildReportFieldItemViewModel

<div class="editor-label">
    <label for="@Model.Field">@Model.Field</label>
</div>
<div class="editor-field">
    <input type="text" name="@Model.Field">
</div>
公共类BuildReportViewModel
{
公共IList字段{get;set;}
}
公共类BuildReportFieldItemViewModel
{
公共字符串字段{get;set;}
}
BuildReportFieldItemViewModel编辑器

public class BuildReportViewModel
{
    public IList<BuildReportFieldItemViewModel> Fields { get; set; }
}
public class BuildReportFieldItemViewModel
{
    public string Field { get; set; }
}
@model BuildReportFieldItemViewModel

<div class="editor-label">
    <label for="@Model.Field">@Model.Field</label>
</div>
<div class="editor-field">
    <input type="text" name="@Model.Field">
</div>
@model BuildReportFieldItemViewModel
@模型场

尝试使用隐藏的密钥字段

视图模型

public class BuildReportViewModel
{
    public IList<BuildReportFieldItemViewModel> Fields { get; set; }
}
public class BuildReportFieldItemViewModel
{
    public string Field;
    public string Key;
}
公共类BuildReportViewModel
{
公共IList字段{get;set;}
}
公共类BuildReportFieldItemViewModel
{
公共字符串字段;
公共字符串密钥;
}
BuildReportFieldItemViewModel编辑器

@model BuildReportFieldItemViewModel

<div class="editor-label">
    <label for="@Model.Field">@Model.Field</label>
</div>
<div class="editor-field">

    @Html.TextBoxFor(x => x.Field)
    @Html.Hidden(Model.Key, "key_value");
</div>
@model BuildReportFieldItemViewModel
@模型场
@Html.TextBoxFor(x=>x.Field)
@隐藏(Model.Key,“Key_值”);

可能是最好的解决方案。您可以为密钥使用GUID,因为它与任何其他数据都没有关联。