【问题标题】:Different page radio buttons being pre-selected预先选择了不同的页面单选按钮
【发布时间】:2018-05-10 15:56:25
【问题描述】:

有两个页面;第 1 节在第一页,第 2 节在第二页。

问题是当第 1 节单选按钮被选中时,即checked="checked" 并继续到第 2 页/第 2 节,第一个单选按钮被预选了?!注意checked="checked"

名称相同,因为它是通过 RadioButtonFor 通过视图模型填充的动态问卷。

第 1 页/第 1 节单选按钮组:

Yes <input id="11" name="VIQuestions[1].Answer" type="radio" value="0">
No  <input id="12" name="VIQuestions[1].Answer" type="radio" value="1">
N/A <input id="13" name="VIQuestions[1].Answer" type="radio" value="2">

第 2 页/第 2 节单选按钮组:

Yes <input id="71" name="VIQuestions[1].Answer" type="radio" value="0">
No  <input id="81" name="VIQuestions[1].Answer" type="radio" value="1">
N/A <input id="91" name="VIQuestions[1].Answer" type="radio" value="2">

我不想强制单选按钮在页面加载时没有选择任何内容,因为当用户提交页面并发现错误时,我希望浏览器记住用户的选择,因此一揽子选择重置不会工作。

我正在寻找一种方法,以便在提交第一个页面并且没有发现错误时,然后加载第二个页面;然后,我想擦除第 1 页中所做选择的所有历史记录。

附:我认为这是存储在浏览器中的单选按钮的名称及其选择导致了这种情况,但我不确定这可能是 MVC 问题。

编辑:为了完整起见,这里是输出单选按钮的 MVC 视图代码。

for (int j = 0; j < Model.VIQuestions.Count; j++)
{
    string questionId = Model.VIQuestions[j].VIQuestion_Id.ToString();

    <label><span>Yes</span>@Html.RadioButtonFor(m => m.VIQuestions[j].Answer, 1, new { id = questionId + 1 })</label>
    <label>&nbsp;&nbsp;<span>No</span>@Html.RadioButtonFor(m => m.VIQuestions[j].Answer, 2, new { id = questionId + 2 })</label>
    <label>&nbsp;&nbsp;<span>N\A</span>@Html.RadioButtonFor(m => m.VIQuestions[j].Answer, 3, new { id = questionId + 3 })</label>
}

【问题讨论】:

  • @RoryMcCrossan 糟糕,我以为我已经做到了。
  • 您需要出示您的相关代码。您是否使用@Html.RadioButtonFor() 来生成单选按钮? (使用来自ModelState 的值是否存在)。您发布到的方法是什么,您在该方法中做了什么 - 重定向(正确)或返回视图(不正确)?而且您的单选按钮甚至没有意义 - 每个按钮都针对不同的属性,因此您可以选择所有这些按钮(并且不能取消选择任何按钮)
  • @StephenMuecke heya,我确实解释了单选按钮是使用 RadioButtonFor 创建的输出...这是一个重定向...我知道当所有名称不同,但确实如此,您不能全部选择它们,它们是一个组,并且在回发时使用视图模型读取它们(因为它们使用 RadioButtonFor 绑定到它)
  • 它们是您编辑中的一个组-您问题顶部的原始代码不是一个组,无法工作:)
  • @StephenMuecke 是的,对不起,我刚刚意识到我的错误(并更正了,它们都同名),对不起!

标签: jquery html asp.net-mvc radio-group


【解决方案1】:

如果您使用表单帖子在调查问卷的页面之间移动,那么您将遇到模型状态已预先填充表单值的功能。这是为了以防您需要在验证失败等情况下显示表单。

如果您对表单值感到满意并希望用户继续,那么要么这样做

this.ModelState.Clear();

在重新显示表单之前,或使用

this.RedirectToAction( ...

并将每个问题作为单独的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2015-06-03
    • 2013-07-06
    • 2022-01-12
    • 2011-06-11
    • 2015-03-04
    • 2012-04-15
    • 2015-05-12
    相关资源
    最近更新 更多