У меня есть следующий случай, когда пользователь выбрал продукт, была восстановлена запись продукта и установлен флаг отставания. Я хочу спросить пользователя, хотите ли вы включить его в заказ в любом случае. Кажется, я не могу найти exaample где-нибудь, что демонстрирует его в IF-заявлении.
Мой фрагмент кода VB:
Dim backorder = myDataTable.Rows(0)("backorder").ToString()
If backorder = "True" And <somehow ask user it they want to order anyway> Then
'do something
End If
Мой Javascript в файле aspx:
<script type = "text/javascript">
function Confirm() {
var confirm_value = document.createElement("INPUT");
confirm_value.type = "hidden";
confirm_value.name = "confirm_value";
if (confirm("Selected item is on temporary back order. Do yuou want to include it on this order?")) {
confirm_value.value = "Yes";
} else {
confirm_value.value = "No";
}
document.forms[0].appendChild(confirm_value);
}
</script>
Я могу прочитать добавленную переменную javascript на странице из VB, но не могу понять, как вызвать javascript, чтобы вызвать пользователя. По какой-то причине я не могу обойти это. Просьба сообщить пример.
Используйте метод RegisterStartupScript
:
Sub ProcessOrder()
'Your code to process the selected products here...
Dim orderAnyway As string = hdnConfirmResponse.Value.Trim()
If selectedItem.BackOrdered Then
If orderAnyway = "" Then
Dim cs As ClientScriptManager = Page.ClientScript
' Define the name and type of the client scripts on the page.
Dim csname1 As String = "ConfirmScript"
Dim cstype As Type = Me.GetType()
' Check to see if the startup script is already registered.
If (Not cs.IsStartupScriptRegistered(cstype, csname1)) Then
Dim cstext1 As String = "Confirm();"
cs.RegisterStartupScript(cstype, csname1, cstext1, True)
End If
Else
If orderAnyway = "yes" Then
'ADD THE BACKORDERED ITEM SINCE THEY CONFIRMED
End If
End If
End If
End Sub
Я ненавижу отвечать на свой вопрос, но это то, что в конечном итоге сработало. Смесь ответа mjw и больше исследований моей попытки javasvript. Вместо того, чтобы JS создавать скрытое поле, я добавил его в HTML
<asp:HiddenField runat="server" id ="confirm_value"/>
Новый VB:
If myDataTableFrame.Rows.Count > 0 Then
Dim backorder = myDataTableFrame.Rows(0)("backorder").ToString()
If backorder = "True" And confirm_value.Value <> "Yes" Then
Dim cs As ClientScriptManager = Page.ClientScript
' Check to see if the startup script is already registered.
If (Not cs.IsStartupScriptRegistered(Me.GetType(), "ConfirmScript")) Then
Dim cstext1 As String = "Confirm();"
cs.RegisterStartupScript(Me.GetType(), "ConfirmScript", "Confirm();", True)
End If
Return
Else
confirm_value.Value = "No"
...
Новый Javascript: см. ASP.NET set hiddenfield значение в Javascript Также добавил повтор кнопки, если они ответили "ОК"
<script type = "text/javascript">
function Confirm() {
if (confirm("Selected item is on temporary back order. If you want to include it on this order click OK, then resubmit it?")) {
//had to resort to this to find hidden field rather than document.getElementById('confirm_value')
var x = document.getElementById('<%= confirm_value.ClientID%>');
x.value = 'Yes';
//re-click the button
document.getElementById('<%=bttnadd.ClientID%>').click();
} else {
var x = document.getElementById('<%= confirm_value.ClientID%>');
x.value = 'No';
}
}
</script>
Confirm()
при загрузке страницы. Таким образом, если ваш текущий поток похож на ... Пользователь выбирает продукт и запускает обратную передачу, обратная передача получает значение флага невыполненного заказа, ТО, когда вы хотите как-то показать сообщение подтверждения, вы попадаете в место, где вам нужно 2 обратной передачи, чтобы выполнить то, что можно сделать за один раз, если вы изначально отправите этот флаг в таблицу.