Checkbox不会被取消选中,反之亦然

时间:2016-10-17 18:04:37

标签: html asp.net vb.net checkbox

我看了很多不同的解决方案,但几乎所有解决方案都不是我想做的。

我有一个aspx页面,上面有5个复选框。我从SQL DB中提取数据,并根据检索到的值设置复选框的初始开/关状态。这很好。

当我尝试选中或取消选中复选框时,问题就会出现。如果选中它将取消选中一小段时间,然后检查返回,反之亦然(未选中检查状态)。

以下是复选框:

<asp:CheckBox ID="ckbIVPO" runat="server" Text=" Invoice Value & P.O.#" OnCheckedChanged="ckbIVPO_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbQuNotes" runat="server" Text=" Quality Notes" OnCheckedChanged="ckbQuNotes_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbShipTerms" runat="server" Text=" Ship To & Shipping Terms" OnCheckedChanged="ckbShipTerms_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbMatSurFin" runat="server" Text=" Material/Surface/Finish" OnCheckedChanged="ckbMatSurFin_CheckedChanged" AutoPostBack="true" />
<asp:CheckBox ID="ckbFabFasExt" runat="server" Text=" Fabrication & Fastner Extras" OnCheckedChanged="ckbFabFasExt_CheckedChanged" AutoPostBack="true" />

每个OnCheckedChange事件基本相同(只有控件ID名称更改):

If [control ID].Checked = checked Then
   [control ID].Checked = False
Else
    [Control ID].checked = True
End IF

我还在SO上发现了一篇文章,讨论了如何使用隐藏文本框并根据其中的值设置复选框。但我似乎无法让它发挥作用。我想我错过了一些东西。

以下是代码:

    If txbivpo.Text = "1" Then
        ckbIVPO.Checked = True
    Else
        ckbIVPO.Checked = False
    End If
    If txbshtrm.Text = "1" Then
        ckbShipTerms.Checked = True
    Else
        ckbShipTerms.Checked = False
    End If
    If txbqunotes.Text = "1" Then
        ckbQuNotes.Checked = True
    Else
        ckbQuNotes.Checked = False
    End If
    If txbmatsurfin.Text = "1" Then
        ckbMatSurFin.Checked = True
    Else
        ckbMatSurFin.Checked = False
    End If
    If txbfabfasext.Text = "1" Then
        ckbFabFasExt.Checked = True
    Else
        ckbFabFasExt.Checked = False
    End If

我似乎无法让它发挥作用。我确信我错过了一些东西,但我不确定它是什么。我也不是这样做的。我使用的是VB,因为我对C#不是很好。 (实际上我对C#感到厌恶!)如果用户更改了某些内容并且我需要更新SQL,我使用隐藏文本框来提取更新查询的数据。

任何人都可以帮助我或者指出一个明确的示例,说明如何简单地更改复选框状态,然后停留,然后能够更新隐藏文本框以便查询更新正确吗?

2 个答案:

答案 0 :(得分:0)

这是猜测,因为没有显示从DB设置正确文本框的代码。但我认为你必须将这段代码包装在IsPostBack检查中:

If Not IsPostBack Then
    setCheckBoxValuesFromDB
End If

当点击一个复选框执行PostBack时,可能会发生什么。在PostBack中,可能是在Page_load中,从数据库中检索默认值,并覆盖用户单击的默认值。

答案 1 :(得分:0)

该复选框最初取消选中,因为这是在浏览器端完成的。回发完成后,页面将再次呈现。

如果您没有更改数据库中的数据,那么您将从渲染的数据库中获取状态。

据推测,您有一种初始化复选框的方法,我们将其称为def create @comment = Comment.new(comment_params) @comment.user = current_user # we are making sure that current_user is set to comment. if @comment.save flash[:notice] = "Comment successfully created" redirect_to post_video_path(@comment.video.post, @comment.video) else @errors = @comment.errors.full_messages.join(', ') flash[:notice] = @errors render :'videos/show' end end private def comment_params params.require(:comment).permit(:body, :user, :video_id) # We are permitting video_id instead of video end ,然后在Page_Load方法中调用它。您需要做的就是 not 在回发上调用该方法,如下所示:

InitCheckboxes