1

フォーム コレクションの値を取得して DB に挿入しようとしました。しかし、私が直面している典型的な問題は、最初の行のみが DB に挿入されることです。次のように私のコード:

[HttpPost]
    public ActionResult Create(FormCollection Students)
    {
        if (ModelState.IsValid)
        {
            string[] names = Students["name"].Split(char.Parse(","));
            string[] dnos = Students["dno"].Split(char.Parse(","));
            string[] adds = Students["address"].Split(char.Parse(","));

            student stds = new student();

            for (var i = 0; i < names.Length; i++)
            {
                stds.name = names[i];
                stds.dno = dnos[i];
                stds.address = adds[i];
                stds.active = true;
                db.students.AddObject(stds);

            }
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        return View(Students);
    }

これを手伝ってください。

4

4 に答える 4

3

ループで変更を保存し、student stdsまた移動します

            for (var i = 0; i < names.Length; i++)
            {
                student stds = new student();
                stds.name = names[i];
                stds.dno = dnos[i];
                stds.address = adds[i];
                stds.active = true;
                db.students.AddObject(stds);
                db.SaveChanges();
            }
于 2013-10-30T08:31:37.177 に答える
0

ここで定義された学生クラスは参照オブジェクトのように見えるため、for ループで変更するたびに、先に作成された単一のオブジェクト インスタンスが常に変更されます。次のように、ループごとに新しいオブジェクトを作成する必要があります。

        for (var i = 0; i < names.Length; i++)
        {
            student stds = new student();    
            stds.name = names[i];
            stds.dno = dnos[i];
            stds.address = adds[i];
            stds.active = true;
            db.students.AddObject(stds);

        }
于 2013-10-30T08:33:58.423 に答える
0

student stds = new student();for ループに入れます。それはリフレッシュされていないと思います。

于 2013-10-30T08:31:30.043 に答える
0

あなたの投稿から、使用しているDBを特定するのはかなり困難ですが、そのような場合は非常に頻繁にエラーが発生します-主キーを制御していません。そのため、学生 ( ) をループに追加stdsしますが、予測できない (少なくとも NULL で) 初期化されますが、2 回目の試行でそのようなレコードが既に存在することがわかります。

于 2013-10-30T08:33:01.927 に答える