2016-09-19 17 views
0

私はC#を初めて使っていますが、フォームを送信するときにフォームの値をキャッチして新しいアイテムを作成し、コードに従ってリストに入れます私は、foreachループで作成した項目を印刷.cshtmlファイルで古いアイテムを上書きせずに新しいアイテムを追加する

public ActionResult Movie() 
    { 

     int id = Convert.ToInt16(Request.Form["inputmovieid"]); 
     string name = Request.Form["inputmovietitle"]; 
     int year = Convert.ToInt16(Request.Form["inputproductionyear"]); 

     List<Movie> movies = new List<Movie>();    

     Movie movieitem = new Movie(id, name, year); 

     movies.Add(movieitem); 

     return View(movies); 
    } 

が、問題は、私は新しい項目の新しい値で再び、このフォームを送信した場合、それは古いものを上書きすることである。以下リスト内の

目的:フォームを再度送信するときに、古いアイテムを上書きせずに新しいアイテムをリストに追加します。誰もがこれを解決するために上記のコードを変更する方法を知っていますか?

+4

今すぐ、あなたはすべてのリクエストで新しいリストを取得します。あなたはページの状態を保持するためにどこかのストレージを必要とするでしょう。映画のリストは、その状態に置く必要があります。これは、メモリやデータベース、クライアント側のJavaScriptベースのストレージなどのシンプルなセッションになる可能性があります。 –

+2

問題は、作成/追加されたアイテムを保存しないことです。あなたがここでやっていることは毎回新しいリストを作成することです。その後、新しく作成されたリストに1つのアイテムを追加し、それを「表示」します。 –

+0

私はC#を初めて使いました。コードサンプルをお願いしますか? – eqinna

答えて

0

保存データのデータベースまたはにViewState内のリストを格納する必要があります。以下のような

何か:

public ActionResult Movie() 
{ 
    var list = ViewState["MyList"] as List<Movie>; 
    if(list == null) 
    { 
     list = new List<Movie>(); 
     ViewState["MyList"] = list; 
    } 
    int id = Convert.ToInt16(Request.Form["inputmovieid"]); 
    string name = Request.Form["inputmovietitle"]; 
    int year = Convert.ToInt16(Request.Form["inputproductionyear"]); 



    Movie movieitem = new Movie(id, name, year); 

    list.Add(movieitem); 

    return View(list); 
} 

しかし、asp.netの私の知識が少し薄れている、あなたは

[Serializable] 
public class Movie 
{ 
    ... 
} 

あなたがポストバックを取得するたびに、シリアル化可能としてMovieクラスをマークする必要がある場合があります/ reload、クラス全体が再構築されるので、リストをフィールドに格納することは役に立ちません。だから、彼らはviewstateを発明したのです。 (HTMLで送信された隠しフォームフィールド)

+0

この場合、データベースを使用せずに解決したいのですが、古いものを上書きせずに複数の項目をリストに追加したいだけですが、メソッドの外にリストを置いても機能させることはできません。 : – eqinna

+0

あなたは私の答えを読んだり、フィールドにそれを保存したり、ビューステートに保存したりすることはできません(データベースはありません) –

+0

あなたのコードをコピーして貼り付けたとき "ViewStateは現在のコンテキスト "。私はC#のために本当に新しいですので、私はそれが何を意味するのか分かりませんか? – eqinna

関連する問題