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

时间:2018-02-09 22:06:00

标签: c# html asp.net-mvc radio-button model-binding

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

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

我遇到的问题是在我的视图中使用此特定代码:

@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

     

差异:

     
    

C#

         
      

t1-“值1”       t2-“值2”

    
         

HTML

         
      

t1-“值1”       t2-“值2”

    
  

使用单选按钮,其中 - 字符位于值的旁边。当只有一个不匹配的列时,这种方法有效,但是当有2个或更多时,我只能从所有列表中选择1个单选按钮(这不是预期的,但我知道这是因为所有的“名称”我的单选按钮是一样的。)

预期的性能是每个列都有自己独立的单选按钮集,但是它们大多数都被POST为与创建列表相同的名称(如上所述)。这是因为Action方法不能作为列表而采用无限变化的输入。

例如,如果我选择了C#,value1和HTML,则value1的目标结果是映射到名为“Records”的表单数据,以便Records [0]从C#列输出value1并记录[1] ]在控制器中使用时,将从HTML列输出value1。

我基本上要求的是帮助/修复,无论是使用C#,Javascript,J-Query还是在HTML本身(PHP都不可能),来解决这个问题。

我意识到这可能看起来散乱而且凌乱,但我已经在整个项目上工作了大约一个半星期,我的大脑已经完全被炸掉了。如果我能做些什么来提供额外的清晰度,我会非常乐意。谢谢!

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似情况,我最终会使用相同的下拉菜单&#34;选择&#34;名称,它的工作原理与我的意图相同。谢谢大家的帮助!