具有多个同名单选按钮的表单

Form with multiple radio buttons of the same name

我目前正在编写一个程序,根据主键比较来自多个数据库的数据(我正在使用 VS17 和 MVC 架构,使用 C# razor 页面和 HTML)。简而言之,我的程序显示来自多个数据库中相同 table 的数据字段(理论是不同数据库之间存在不匹配的记录),我使用主键对其进行比较。我将它们显示为单选按钮,以便用户可以 select 正确的值,然后相应地更新数据库。

我 POST 表单数据并使用模型绑定,以便我可以创建发送到我的控制器的项目列表。这是因为我向控制器发送了不同数量的数据,因此它们必须具有相同的名称才能使模型绑定正常工作(或者至少据我所知)。

我 运行 遇到的问题在我看来是这个特定代码:

@for (int x = 0; x < Model.ContextTables.Count(); x++)
{
    for (int y = 0; y < Model.ContextTables[x].Count(); y++)
    {
        if (Model.ContextTables[0][y] != Model.ContextTables[x][y])
        {
            if (x == 1)
            {
                <h5>Column: @Model.Columns[y]</h5>
                <input name="Update_Columns" id="Update_Columns" type="hidden" value=@Model.Columns[y]>
                <text>@Model.DBNames[0]:&emsp;&emsp;&emsp;</text><input type="radio" name="Records" value="@Model.ContextTables[0][y]" checked="checked"> @Model.ContextTables[0][y] <br />
            }
            <text>@Model.DBNames[x]:&emsp;&emsp;&emsp;</text><input type="radio" name="Records" value="@Model.ContextTables[x][y]" > @Model.ContextTables[x][y] <br />
        }
    }
}

基本上它的工作原理是,如果有 2 个(或更多)列不匹配,它会创建更多组单选按钮。

例如,假设我们有主键 "Stack Overflow",并且在 2 个数据库之间,变量 "C#" 和 "HTML" 是不同的。我的网页看起来大致像这样:

PRIMARY KEY: Stack Overflow

DISCREPANCIES:

C#

t1- "value 1" t2- "value 2"

HTML

t1-"value 1" t2-"value 2"

带有单选按钮,其中 - 字符位于值的旁边。当只有一个不匹配的列时,这种方法有效,但是当有 2 个或更多列时,我只能 select 所有列表中的 1 个单选按钮(这不是故意的,但我知道这是因为 "name" 我所有的单选按钮都是一样的)。

预期的表现是每一列都有自己独立的一组单选按钮,但它们大多数被 POST 编辑为与创建列表相同的名称(正如我上面提到的)。这是因为 Action 方法不能采用无限变化的输入,除非它是一个列表。

例如,如果我 selected C#,value1 和 HTML,value1 的预期结果是将两者都映射到名称为 "Records" 的表单数据,这样 Records[ 0] 将从 C# 列输出 value1,而 Records[1] 将在控制器中使用时从 HTML 列输出 value1。

我基本上要求的是 help/a 修复,无论是使用 C#、Javascript、J-Query 还是 HTML 本身(PHP 是不可能的),以解决此问题。

我意识到这可能看起来漫不经心和混乱,但我已经为整个项目工作了大约一个半星期,我的大脑完全炸了。如果有什么我可以做的来提供额外的清晰度,我会非常乐意。谢谢!

为了防止有人遇到类似情况,我最终使用了具有相同 "select" 名称的下拉菜单,并且它按我的预期工作。感谢大家的帮助!