Проверьте значение в ViewState - PullRequest
1 голос
/ 17 сентября 2010

Привет всем, я новичок в ViewState, и я смотрю, какие значения хранятся в нем.Я знаю, как перебрать массив для проверки значения, но я не знаю, как это сделать для свойства ViewState ("test").

Допустим, я добавил "bob, tom,Джим "к ViewState с именем ViewState (" тест ").Я хотел бы иметь возможность видеть, был ли "Том" в ViewState ("тест").Если нет, то добавьте его, но если он уже существует, пропустите его.

Спасибо!

Дэвид

КОД

Public strIDArray() As String
Public vsSaver As String

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            ViewState("vsSaver") = "0000770000"
        Else
            If (Not ViewState("vsSaver") Is Nothing) Then
                strIDArray(strIDArray.Length) = CType(ViewState("vsSaver"), String)
            End If
        End If
 end sub

Private Sub gvData_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvData.RowCommand
         Dim idIndexNumber As Integer = Array.IndexOf(strIDArray, strID)

            If Not ViewState("strIDArray").ToString().Contains(strID) Then
                strIDArray(idIndexNumber + 1) = strID
                ViewState("strIDArray") = CLng(ViewState("strIDArray").ToString()) And CLng(strID)
            End If
End Sub

Я так растерялся .. ха.

Ответы [ 4 ]

8 голосов
/ 17 сентября 2010

Предполагая, что вы поместите значения в одну строку:

ViewState("test") = "bob, tom, jack"

If Not ViewState("test").ToString().Contains("tom") Then

    ViewState("test") = ViewState("test").ToString() And ", tom"

End If

Вышеприведенное сработает, если вы используете одну строку для хранения имен.Возможно, вы захотите рассмотреть объект коллекции, такой как List.

Тогда вы можете иметь:

Dim names As New List(Of String)() From { _
    "tom", _
    "jack", _
    "harry" _
}

ViewState("test") = names

Dim viewstateNames As List(Of String) = TryCast(ViewState("test"), List(Of String))

If viewstateNames IsNot Nothing AndAlso Not viewstateNames.Contains("tom") Then
    viewstateNames.Add("tom")
End If

На заметку, я ненавижу VB.NET.Вы должны рассмотреть C #.Намного проще следовать:

List<string> names = new List<string> { "tom", "jack", "harry" };
ViewState["test"] = names;

List<string> viewstateNames = ViewState["test"] as List<string>;
if (viewstateNames != null && !viewstateNames.Contains("tom"))
{
    viewstateNames.Add("tom");
}
3 голосов
/ 17 сентября 2010

Вы можете проверить известные ключи ViewState, просто запросив ключ;следующее не будет выдавать исключение, если в ViewState не было задано «test»:

if(ViewState["test"] == null) ...

ViewState, являющийся StateBag, также является IEnumerable, то есть вы можете перебирать его содержимое, используя foreach, илииспользуйте Linq для поиска по значению:

ViewState.Where(si=>si.IsDirty); //gets all ViewState members that changed since the last postback

Наконец, ViewState предоставляет коллекции своих ключей и значений в виде ICollections.Они также могут быть повторены, поскольку ICollection является IEnumerable, что означает, что вы можете использовать Linq для проверки существования ключа:

if(ViewState.Keys.Any(k=>k == "test")) ...
2 голосов
/ 17 сентября 2010

Обычно вы сначала проверяете, существует ли элемент ViewState.

if (ViewState["Foo"] != null)
{
   // maybe I can do something here
}

Если это так, следующим шагом будет получение объекта, сохраненного с указанным ключом. Так как он хранится как объект, нам нужно привести к тому, какой тип действительно есть в нашем коде.

if (ViewState["Foo"] != null)
{
   List<string> values = (List<string>)ViewState["Foo"];
   // do something with values
}

В этот момент выполнение нашего теста на существование определенного значения внутри нашего списка будет делом обычного кода.

if (ViewState["Foo"] != null)
{
   List<string> values = (List<string>)ViewState["Foo"];
   if (!values.Contains("tom"))
   {
       values.Add("tom");
   }
}

В VB это, вероятно, будет что-то вроде

If Not (ViewState("Foo") Is Nothing) Then
    List(of String) values = CType(ViewState("Foo"), List(of String))
    If Not (values.Contains("tom")) Then
        values.Add("tom")
    End If
End If
0 голосов
/ 17 сентября 2010
Dim testValue As String = CStr(ViewState("test"))

If testValue.IndexOf("tom") = -1 Then
 'add it....
 testValue += testValue & ", tom" 'will add to end of string
 ViewState("test") = testValue
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...