ASP: передача значения

#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»]