我目前正在编写一个程序来比较基于主键的多个数据库中的数据(我使用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" [email protected][y]>
<text>@Model.DBNames[0]:   </text><input type="radio" name="Records" value="@Model.ContextTables[0][y]" checked="checked"> @Model.ContextTables[0][y] <br />
}
<text>@Model.DBNames[x]:   </text><input type="radio" name="Records" value="@Model.ContextTables[x][y]" > @Model.ContextTables[x][y] <br />
}
}
}
基本上它是如何工作的,如果有2个(或更多)列不匹配,它会创建更多的单选按钮集。
例如,假设我们有主键“Stack Overflow”,在2个数据库之间,变量“C#”和“HTML”是不同的。我的网页看起来或多或少像这样:
主要关键:堆栈溢出
差异:
C#
t1-“值1”t2-“值2”
HTML
t1-“值1”t2-“值2”
使用单选按钮, - 字符位于值的旁边。当只有一个不匹配的列时,这种方法有效,但是当有2个或更多时,我只能从所有列表中选择1个单选按钮(这不是预期的,但我知道这是因为所有的“名称”我的单选按钮是一样的)。
预期的性能是每列都有它自己独立的单选按钮集,但它们大多数都是POST,其名称与创建列表相同(如上所述)。这是因为Action方法不能在不作为列表的情况下采用无限变化的输入。
例如,如果我选择了C#,value1和HTML,则value1的目标结果是两者都映射到名为“Records”的表单数据,这样Records [0]将从C#列输出value1而Records [1]将输出在控制器中使用时,HTML列中的value1。
我本质上要求的是帮助/修复,无论是使用C#,Javascript,J-Query还是在HTML本身(PHP都不可能),来解决这个问题。
我意识到这可能看起来散乱和凌乱,但我已经在整个项目上工作了大约一个半星期,我的大脑完全被炒了。如果我能做些什么来提供额外的清晰度,我会非常乐意。谢谢!
如果有人遇到类似的情况,我最终使用具有相同“选择”名称的下拉菜单,它就像我想要的那样工作。谢谢大家的帮助!