我有一个网格视图,包含一个文本框,并为网格视图中的每一行下拉。 我想要一个确认对话框,以显示当用户在文本框中输入值时,如果它与每个行的相应标签的值不匹配,则会显示该值。
var_cat2
调试时我发现在本地计算机上工作的是<asp:TemplateField HeaderText="Payment Amount">
<ItemTemplate>
<asp:Label ID="lblSuggestedAmount" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Actual Payment Amount">
<ItemTemplate>
<asp:TextBox ID="txtbxActualAmount" Visible="true" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="For Rental Month">
<ItemTemplate>
<asp:DropDownList ID="ddlPaymentMonth" Visible="true" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
但是当我将项目上传到IIS时,提示不会出现。
System.Windows.Forms.MessageBox.Show()
我理解,因为对话框显示在客户端,运行代码的对话框显示在服务器上,而不是客户端浏览器上。
从阅读other similar questions开始,我也理解我需要通过JavaScript实现这一目标。
我想我会将TextBox actualAmount = (TextBox)gvPayments.Rows[i].FindControl("txtbxActualAmount");
Label suggestedAmount = (Label)gvPayments.Rows[i].FindControl("lblSuggestedAmount");
if (Convert.ToDouble(actualAmount.Text) != Convert.ToDouble(suggestedAmount.Text)) {
System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("Some payments have actual payment amounts greater than the suggested amount. Is this correct?", "Warning",
System.Windows.Forms.MessageBoxButtons.YesNo,
System.Windows.Forms.MessageBoxIcon.Warning,
System.Windows.Forms.MessageBoxDefaultButton.Button1,
System.Windows.Forms.MessageBoxOptions.ServiceNotification);
if (dr == System.Windows.Forms.DialogResult.No) {
return;
} else {
actualAmount.BackColor = Color.White;
}
}
事件附加到我的更新/提交按钮,但是javascript可以循环遍历gridview的行,比较OnClick
和Label.text
并将该文本框背景颜色设置为黄色并显示我的对话框?然后,一旦用户点击确定,它是否会继续执行其余的代码隐藏执行?
答案 0 :(得分:0)
首先,你不能在asp.net应用程序上使用Windows.Forms,记住UI是在客户端计算机的浏览器中运行的,你编写的代码正在上运行服务器方面,在不同的计算机......
您有两种方法可以实现目标:
简短,性能不佳:在响应结束时添加javascript函数,javascript将在浏览器中显示确认框,但所有逻辑仍然写在代码后面,这是通过调用 ClientScript.RegisterClientScriptBlock
RegisterClientScriptBlock(this.GetType(),
"confirmmsg",
"<script> if(Confirm('do you want to proceed')) forms.submit();</script>");
漫长而最好的方式,javascript&amp; jquery可以轻松实现您需要的代码,例如:
function checkText(txt) {
var allLables = $("[id*='lblSuggestedAmount']"); //get all the labels in the grid
for (var i = 0; i < allLables.length; i++) {
if (allLabels[i].html() == txt) {
txt.style.bakground-color = "yellow";
if(Confirm("This is message to confirm")) {
form1.submit() // what ever you need
}
}
}
}
答案 1 :(得分:0)
首先在前端我添加了一些其他答案提供的JavaScript / jQuery。
asp:Button
并在我的<asp:Button ID="btnUpdateClient" Text="Update Client" OnClientClick="confirmPayment()" OnClick="btnUpdateClientTable_Click" Visible="true" runat="server" />
中也会触发代码隐藏
string confirm = Request.Form["confirm_value"];
bool paymentErrorFlag = false;
在我的btnUpdateClientTable_Click()方法
中我需要
paymentErrorFlag
获取确认对话框的响应。这将是一个&#34;是&#34;或&#34;不&#34;响应。只要在文本框中输入值但未从我的下拉列表中选择值,该标志就会设置为true。
我会循环浏览网格视图中的每一行,并使用.Text == string.Empty
的组合以及.SelectedIndex == 0
和return;
上的检查来中断函数和Request.Form[]
而不更新数据库。
基本上,关键是import pygame
import sys
#game stuff
pygame.init()
screen = pygame.display.set_mode((640, 480),0,32)
clock = pygame.time.Clock()
#functions
def makeText(title,text,posx,posy):
font=pygame.font.Font(None,30)
scoretext=font.render(str(title)+ ": " +str(text), 1,(0,0,0))
screen.blit(scoretext, (posx, posy))
def clickButton(name,x,y,width,height):
if x + width > cur[0] > x and y + height > cur[1] > y:
if click == (1,0,0):
makeText("score",300,100,10)
#objects
button1 = pygame.Rect((0,0), (32,32))
while True:
screen.fill((255,255,255))
screen.fill((55,155,0), button1)
#update display
pygame.display.update()
clock.tick(60)
#event handling
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
elif event.type == pygame.MOUSEBUTTONDOWN:
cur = event.pos
click = pygame.mouse.get_pressed()
clickButton("button1",button1.left,button1.top,button1.width,button1.height)
在确认对话框中返回选择的值。