how to convert viewstate to session state? - c#

I have created the view state. i want to use the view state in different pages.Is is possible to access the view state in different pages?
else can move the view state in session object in asp.net c#. how to do that?

i want to use the view state in different pages
Answer: Then There is no Need to Use ViewState.You Should Use Session as Per Your Question
What is ViewState
View State is one of the most important and useful client side state
management mechanism. It can store the page value at the time of post
back (Sending and Receiving information from Server) of your page.
ASP.NET pages provide the ViewState property as a built-in structure
for automatically storing values between multiple requests for the
same page.
What is Session
Session provides a facility to store information on server memory. It
can support any type of object to store along with our own custom
objects. For every client, session data is stored separately, which
means session data is stored on a per client basis
You can Easily Convert Session to ViewState
if(Session["Key"]!=null)
Viewstate["Key"] = Session["Key"];
or Vice Versa
if(Viewstate["Key"]!=null)
Session["Key"]=Viewstate["Key"]

Viewstate is equal to hidden field value. This is available to current page only where viewstate is defined and used. If you want to read those data in other pages it won't be available.
You need to store those values to session ,wherever you have done ViewState["key"]= "value". And you mean to access key in other pages. Viewstate is saved as encoded value in hidden field whereas session value is stored in server memory.
e.g. Session["key"] = "value".

Session is used for multiple pages
while viewstate can only be use to one page
How to convert session to viewstate.
Viewstate["ABC"] = Session["ABC"]
but for multiple pages you need session.

Related

How to maintain data between Get and Post Method for same view in ASP.NET MVC? [duplicate]

I am trying to get the hang of MVC framework so bear with me.
Right now, the only thing I'm using the session store for is storing the current logged in user. My website is simple. For this example, consider three domain objects, Person, Meeting, and File. Users can log in and view a "members only" profile of a meeting and can add files to it, or view a meeting's public "profile" if they aren't logged in.
So, from the meeting's private profile, with a logged in user, I have a "add files" link. This link routes to FileContoller.Add(int meetingId). From this action, I get the meeting the user want to add files to using the meeting id, but after the form is posted, I still need to know which meeting the user is adding files to. That's where my question lies, should I pass the "currently interacting with" meeting through TempData, or add it to the Session store?
This is how I currently have the Add action setup, but it's not working:
public ActionResult Add(int meetingId)
{
try
{
var meeting = _meetingsRepository.GetById(meetingId);
ViewData.Model = meeting;
TempData[TempDataKeys.CurrentMeeting] = meeting; /* add to tempdata here */
}
catch (Exception)
{
TempData[TempDataKeys.ErrorMessage] = "Unable to add files to this meeting.";
return RedirectToRoute("MeetingsIndex");
}
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(FormCollection form)
{
var member = Session[SessionStateKeys.Member] as Member;
var meeting = TempData[TempDataKeys.CurrentMeeting] as Meeting; /* meeting ends up null here */
if (member == null)
{
TempData[TempDataKeys.ErrorMessage] = "You must be logged in to add files to an meeting.";
return RedirectToRoute("LoginPage");
}
if (meeting == null)
{
TempData[TempDataKeys.ErrorMessage] = "An error occurred. No meeting selected.";
return RedirectToRoute("MeetingsIndex");
}
// add files to meeting
TempData[TempDataKeys.Notification] = "Successfully added.";
return RedirectToRoute("AddFiles", new {meetingId = meeting.MeetingId});
}
Edit:
Based on most of the answers, can any one provide any examples on what kind of data (other than messages) should be stored in TempData vs Session?
TempData is session, so they're not entirely different. However, the distinction is easy to understand, because TempData is for redirects, and redirects only. So when you set some message in TempData and then redirect, you are using TempData correctly.
However, using Session for any kind of security is extremely dangerous. Session and Membership are entirely separate in ASP.NET. You can "steal" sessions from other users, and yes, people do attack web sites this way. So if you want to selectively stop a post information based on whether a user is logged in, look at IsAuthenticated, and if you want to selectively show information based on what type of user is logged in, you use a Role provider. Because GETs can be cached, the only way to selectively allow access to an action in a GET is with AuthorizeAttribute.
Update In response to your edited question: You already have a good example of using TempData in your question, namely, returning a simple error message after a failed POST. In terms of what should be stored in Session (beyond "not much"), I just think of Session as a user-specific cache. Like the non-user-specific Cache, you should not put security-sensitive information there. But it's a good place to stick stuff which is relatively expensive to look up. For example, our Site.Master has the user's full name displayed on it. That is stored in a database, and we don't want to do a database query for it for every page we serve. (An installation of our application is used in a single company, so a user's full name is not considered "security-sensitive.") So if you think of Session as a cache which varies by a cookie which the user has, you won't be far wrong.
The default TempData provider uses the session so there really isn't much of a distinction, except that your TempData is cleared out at the end of the next request. You should use TempData when the data needs only to persist between two requests, preferably the second one being a redirect to avoid issues with other requests from the user -- from AJAX, for example -- deleting the data accidentally. If the data needs to persist longer than that, you should either repopulate the TempData or use the Session directly.
You can use it as per your requirement. A clarification can be,
TempData Vs Session
TempData
TempData allow us to persisting data for the duration of single subsequent request.
ASP.net MVC will automatically expire the value of tempdata once consecutive request returned the result (it means, it alive only till the target view is fully loaded).
It valid for only current and subsequent request only
TempData has Keep method to retention the value of TempData.
Example:
TempData.Keep(), TempData.Keep(“EmpName”)
TempData internally stored the value in to Session variable.
It is used to stored only one time messages like validation messages, error messages etc.
Session:
Session is able to store data much more long time, until user session is not expire.
Session will be expire after the session time out occurred.
It valid for all requests.
N/A
Session varible are stored in SessionStateItemCollection object (Which is exposed through the HttpContext.Session property of page).
It is used to stored long life data like user id, role id etc. which required throughout user session.
TempData and session, both required typecasting for getting data and check for null values to avoid run time exception.
"It doesn't work" isn't very descriptive, but let me offer a couple suggestions.
Under the hood, TempData uses Session to store values. So there isn't much difference in terms of storage mechanisms or anything like that. However, TempData only lasts until the next request is received.
If the user makes an ajax request in between form posts, TempData is gone. Any request whatsoever will clear TempData. So it's really only reliable when you're doing a manual redirect.
Why can't you just simply render the meeting ID to a hidden field in your View form? You're already adding it to the model. Alternately, add it to your route as a parameter.
I prefer to maintain that kind of data in the page itself. Render meetingID as a hidden input, so it gets submitted back to the controller. The controller handling the post can then feed that meeting ID back to whatever view will be rendered, so that the meetingID basically gets passed around as long as you need it.
It's kind of like the difference between storing a value in a global variable before calling a method that will operate on it, vs. passing the value directly to the method.
I would suggest MvcContrib's solution:
http://jonkruger.com/blog/2009/04/06/aspnet-mvc-pass-parameters-when-redirecting-from-one-action-to-another/
If you don't want full MvcContrib, the solution is only 1 method + 1 class that you can easily grab from MvcContrib sources.
The TempData property value is stored in session state. The value of TempData persists until it is read or until the session times out. If you want pass data one controller view to another controller view then you should use TempData.
Use Session when the data need for the throughout application

Feasible way to store temporary variables value in ASP.Net

In ASP.Net sometimes we need to temporary store variable's value.
So, I want to know that Is it feasible to store temporary value in ASP.Net control like Hidden field or to store it in Variables.
If you need it to live across requests, consider using session or cache.
Use sessions if the variable should only be available to one user.
Session["variable"] = "myValue";
string myValue = Session["variable"];
Or you could use cache if the variable should be available to multiple users.
Note:
Yes, you can temporarily hold a variable in a hidden field, but then it will be visible to the user. Do not expose things you don't want the user to see, or change.
Therefore you have the option to save the variable to a session/cache (instead of assigning it to a hidden field), and retrieve it on postback. The value will not be visible to the user.

How to define Variable similer to Session variable in ASP.NET

I want to define a variable or object like session, to stored data about each user, and i want to access this object in many pages,
could u please tell me if there is a way.
thanks
You have onlyy a few choices, really. URL parameters, hidden form inputs, cookies, session (be careful in a load-balanced scenario) or just store/retrieve stuff from a database. RaveDB is bloomin' brilliant for this because it's so fast and document-based.
You can store data in a cookie and then in your codebehind parse the specific cookie into something like a System.Collections.Generic.Dictionary
But you should use sessions.
Edit
IF if's a KeyValuePair<String,TValue> you can set Session[kvp.Key] = kvp.Value;, if not Session["KVP"] = kvp;
If u really don't want to use session use Database mind that this is a slow method...
i've had a few situations where I wanted to minimize/eliminate session storage (due to users being on a horrible wifi connection). to handle this situation I used an encrypted query string with only their ID in the string. in the base page I would decrypt the string and pull information I needed from the database. This information would be populated into objects that I defined and since the objects were in the base page I could access the information from any pages that inherited it.

how to store a list of objects in session

i want to store a list of objects in session
List<ContentQueueLog> inactiveContent = GetInActiveContent(this.userID, this.visitorID);
when i store this list in sesssion it is stored but while trhying to get it
its null
i am storing sessions in sql
someone hinted me about serialization
but i cudnt get it
need some explaination
If you are using an out-of-process storage for the session such as SQL Server or state process you need to decorate the objects that you intend to store in session with the [Serializable] attribute because they need to be transmitted over the wire and saved as a binary representation. Later when you try to read them from the session ASP.NET will fetch this binary representation over the wire and deserialize them back to the original object.

C# & Session Variables to iFrames

I am currently in C# and I have set Session variables on each page.
The link to my Colorbox is in the MasterPage, and on click opens up in> an iframe from a different page in a different folder
i.e.
/admin/deals.aspx <-- iframed page in colorbox which needs SESSION
/default.aspx <-- page with set SESSION
Is there a way I can pass this variable to the iframed page?
Session is relative to the user and site, not the page, so there is no reason why deal.aspx cannot access the Session variable set by default.aspx.
Alternatively, you could just pass the value on the querystring to the iframe. I am not a fan of this though as it means the user can tamper with the variable. Instead what i like to do is generate a random key (guids are good for this), use that as the Session key to store the variable, and then pass the key through on the querystring - still not foolproof, but it obfuscates things (the user cannot tamper with the variable value), and it prevents hardcoding of any keys in to your source code (as different pages need to know the same Session key).
I'm not really sure what you're asking - but let's just wing it;
Session variables are sessionwide and globally accessible, so when you've set the Session variable before opening your "colorbox" you should have access to that Session and therefor the enclosed variable.
On a sidenote however; do you really want to be using iFrames? (and Sessionvars for that matter).

Categories

Resources