#asp.net #vb.net
#asp.net #vb.net
Вопрос:
Я пытаюсь передать значение, ограниченное кнопкой в form1.aspx, в form2.aspx
form1.aspx:
<asp:Button ID="Button1" runat="server" Text="Button" CommandArgument = '<%#Eval("Parking_ID")%>' />
кнопка находится внутри повторителя, который ограничен источником данных, который Select * From [Parking]
Каждая кнопка в повторителе должна иметь уникальное значение, parking_Id
основанное на CommandArgument
.
В формате 1.aspx.vb:
Protected Sub repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles repeater1.ItemCommand
Dim value As Int32 = Convert.ToInt32(e.CommandArgument)
Response.Redirect("form2.aspx?id=" amp; value)
Session("field4") = value
В Form2.aspx.vb:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim field4 As String = CType(Session.Item("field4"), String)
Parking_ID1.Text = field4
Но Parking_ID1.text Label
не показывает никаких значений.
Буду признателен за любую помощь
С уважением
Комментарии:
1. Почему бы вам просто не использовать параметр querystring «id» в Form2? В настоящее время вы передаете значение в качестве параметра строки запроса, а также сохраняете его в сеансе, что кажется избыточным.
2. Ответ. Перенаправление («form2.aspx?id=» amp; значение, True)
3. @Andres Fjeldstad Спасибо, попробовал оба предложения, и это все еще не проходит.
4. @Govind KamalaPrakash Malviya это не сработало
Ответ №1:
Перенаправление выполняется перед настройкой сеанса.
Кроме того, вы можете более легко получить значение в Form2.aspx.vb, просто выполнив:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim field4 As String = Request.Querystring("id")
Parking_ID1.Text = field4
Вам придется простить мой VB.net синтаксис, я давно его не использовал, но концепция должна сработать для вас.
Расширение ответа на основе запроса от постера:
Если вы хотите передать несколько параметров, есть несколько способов сделать это, хотя ваша модель является подходящей основой для этого:
Protected Sub repeater1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles repeater1.ItemCommand
Dim value As Int32 = Convert.ToInt32(e.CommandArgument)
Dim dataItem as YourStronglyTypedItem = e.Item.DataItem as YourStronglyTypedItem // c# there - sorry
Session("field4") = dataItem.Property1
Session("field5") = dataItem.Property2 // etc.
Response.Redirect("form2.aspx?Parking_ID=" amp; value amp; "amp;OtherProperty=" amp; dataItem.Property2)
Синтаксис не идеален (и часть его есть в c #, извините!), Но по существу, если вы можете захватить связанный элемент данных (через e.Item.DataItem) и приведите его к любому объекту, который вы привязали в первую очередь, тогда вы можете извлечь из него столько свойств, сколько захотите.
Допустим, вы привязали к нему список данных. например,Item.Приведение элемента данных к виджету выдаст вам значения этого конкретного виджета, затем вы можете либо установить несколько значений сеанса (или действительно просто поместить весь виджет в сеанс), либо вы можете передать несколько параметров строки запроса, как я сделал выше.
надеюсь, это поможет?
Комментарии:
1. @Terry_Brown благодарит Терри. Я боюсь, что никакие значения не передаются по-прежнему одинаково
2. Привет, Хумам — если вы поместите точку останова внутри вашего блока repeater1_ItemCommand, есть ли в e.CommandArgument что-нибудь в этом? Кроме того, при перенаправлении написано: Form2.aspx?id= или Form2.aspx?id=<номер здесь> ?
3. @Terry_Brown Это сработало, я неправильно ввел имя поля базы данных. это должно быть
Form2.aspx?Parking_ID=
большое спасибо!!4. рад помочь, и рад, что мой VB.net синтаксис не заставил меня выглядеть полным новичком! лол
5. @Terry_Brown что, если я захочу передать и другие значения, сработает ли использование той же процедуры в моем вопросе?
Ответ №2:
Вы можете следовать правильному синтаксису, приведенному ниже. Затемнить поле 4 как строку = Запрос.Строка запроса[«id»]