【问题标题】:Form with multiple radio buttons of the same name具有多个同名单选按钮的表单
【发布时间】:2018-07-20 18:04:17
【问题描述】:

我目前正在编写一个程序,该程序根据主键比较来自多个数据库的数据(我正在使用 VS17 和使用 C# razor pages 和 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 个(或更多)列不匹配,它会创建更多单选按钮集。

例如,假设我们有主键“堆栈溢出”,并且在 2 个数据库之间,变量“C#”和“HTML”是不同的。我的网页或多或少是这样的:

主键:堆栈溢出

差异:

C#

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

HTML

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

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

预期的性能是每列都有自己单独的一组单选按钮,但它们大多数都被发布为与创建列表相同的名称(正如我上面提到的)。这是因为如果没有列表,Action 方法就不能接受无限变化的输入。

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

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

我意识到这可能看起来很杂乱无章,但我已经为整个项目工作了大约一个半星期,我的大脑完全被烧毁了。如果我能做些什么来提供额外的清晰度,我会非常乐意。谢谢!

【问题讨论】:

  • 该死的。使用 WP、MVVM 和它的模板,这将非常容易。我只能想到两种方法: 1. 标签。所有 WinForms 控件都有一个“Tag”属性,可以接受任何对象。甚至处理程序也需要进行一些转换才能从发送者发送者那里得到它,但在这种情况下它可以帮助识别。 2. 动态生成这些按钮。将数组与数据的引用一起存储。
  • 你永远不会让它与你当前的实现一起工作(至少不是没有黑客)。所有这些条件代码都属于您的控制器,而不是视图。创建一个视图模型来表示您的数据并使用HtmlHelper 方法对其进行强绑定。
  • 如果你想知道这个问题的答案,请展示你的控制器方法(GET 和 POST)和你传递给视图的模型。

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


【解决方案1】:

万一有人遇到类似的情况,我最终使用了具有相同“选择”名称的下拉菜单,它的工作原理与我的预期一样。感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多