我看了很多不同的解决方案,但几乎所有解决方案都不是我想做的。
我有一个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,我使用隐藏文本框来提取更新查询的数据。
任何人都可以帮助我或者指出一个明确的示例,说明如何简单地更改复选框状态,然后停留,然后能够更新隐藏文本框以便查询更新正确吗?
答案 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