2016-06-20 8 views
0

私はmvcを初めて使用しています。このモデルには苦労しています。 私の理解では、アクションごとに1つのモデルしか使用できません。asp.net mvcモデルで作業する方法(ポストコントローラのアップデート)

public class TestModel 
{ 
    public string foo1 { get; set; } 
    public string foo2 { get; set; } 
    public string foo3 { get; set; } 
} 

私は部分的に正常なアクションで私のモデルをロードします:

public ActionResult Index() 
    { 
     TestModel model = new TestModel(); 
     model.foo1 = "foo1"; 
     return View(model); 
    } 

次に、ユーザは、ビューからモデルにデータを追加する必要があります。

私はポストコントローラにさらにデータを追加する必要があり、ユーザのデータによると
@model SAS_MVC.Models.Test.TestModel 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(model => model.foo1, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.EditorFor(model => model.foo2, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.EditorFor(model => model.foo3, new { htmlAttributes = new { @class = "form-control" } }) 

    <input type="submit" value="submit" /> 
} 

[HttpPost] 
    public ActionResult Index(MyModel model, FormCollection form) 
    { 
     // get some data from DB 

     model.foo3 = 123; 
     return View(model); 
    } 

どのように私は永久にこのモデルを保存することができますか?私には問題があります。 foo3はビューでは空です。データを失うことなく、ポストコントローラとビューの間でモデルを何度も渡したいと思います。

私はTempDataとViewBagで試してみましたが、私にとってはこれはintellisenseで動作するのが非常に不快です。

どうすればいいですか?手伝ってくれてありがとう! EF6と

更新:

public class MyEntity 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class TestController : Controller 
{ 
    DB03SASModel dbModel = new DB03SASModel(); 

    // GET: Test 
    public ActionResult Index() 
    { 
     MyEntity model = new MyEntity(); 
     model.Name = "AAAA"; 
     dbModel.MyEntities.Add(model); 
     dbModel.SaveChanges(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyEntity model) 
    { 
     model.Name = "BBBB"; 
     dbModel.SaveChanges(); 
     //UpdateModel(model); 
     return View(model); 
    } 
} 

ビュー

@model SAS_MVC.MyEntity 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.DisplayFor(model => model.Id, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.HiddenFor(model => model.Id, new { htmlAttributes = new { @class = "form-control" } }) 


    <input type="submit" value="submit" /> 
} 

今、私はEFコードファーストを使用してモデルを保存し、私はDBでそれを確認 - >すべてのことはよく保存されます。 しかし、もう一度ビューは間違った価値を持ち、私はまだ苦労しています。 私は、@ Html.HiddenForがポスト・コントローラーのエンティティの現在のIDを提供していることを知りました。値を「BBBB」に変更したのと同じエンティティをビューに戻すよりも、ビューが更新を行ったことはありませんでした。 申し訳ありません。私がUpdateModel(モデル)を試してみる。 "AAAA"は再び私の価値です!この価値はどこから生じたのですか? DBにはこの時点でそのような価値はありません!!何が間違っていたのですか?

+3

正しいパターンは、投稿が発生したときにデータを保存することです。データベースから取得する必要があるデータが必要なたびに –

+0

「アクションごとに1つのモデルしか使用できません。何らかの理由で、顧客モデルと注文モデルの両方を同時に送信する必要があるフォームがあるとします。CustomerプロパティとOrderプロパティの両方を含む新しいモデルCustomerOrderを作成して、両方を同時に投稿することができます。 – mason

+0

PRGパターンを見てください。これはあなたが[RedirectToActionでモデルを含めるにはどうしたらいいですか?](http://stackoverflow.com/questions/11209191/how-do-i-include-a-model-with-a-redirecttoaction) – Shyju

答えて

0

モデルを保存するには、後処理でモデルを永続的に保存する必要があります。モデルをデータベーステーブルにマップし、データベースを作成する必要があります。モデルデータを保持するテーブルを作成し、Entityフレームワークまたは他のORMを使用してモデルをデータベーステーブルにマップします。

アップデート1:

あなたがそうするたびに、あなたがそれを取得しますポストアクションに「BBB」を保存し、最初のgetアクションで、その後のポストアクションで、2つの場所でデータベースにモデルを保存していますgetアクションに「AAAA」で上書きするので、ここではあなたのコードがどうあるべきかです:あなたが唯一のポストアクションで起こるデータベースへのデータの保存を参照してくださいとして

public class TestController : Controller 
{ 
    TestEntities dbModel = new TestEntities(); 

    public ActionResult Index(int? id) 
    { 
     MyEntity model = new MyEntity(); 
     if (id.HasValue) 
      model = dbModel.MyEntity.First(m => m.Id == (id ?? 0)); 

     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyEntity model) 
    { 
     dbModel.MyEntity.Add(model); 
     dbModel.SaveChanges(); 

     return RedirectToAction("Index", new { id = model.Id }); 
    } 
} 

は、getアクションは、データを取得することですデータベースから戻ってきます。

+2

ようこそStackoverflowへようこそ!優れた回答を提供するには、記述したタスクを完了する方法について、いくつかのコードや詳細な説明を必ず記載してください。 – buczek

+0

@Bassemに感謝します!あなたの 'RedirectToAction'で私のモデルをルーティングするとき、それは完璧に働いています。 – GertR

+0

@buczekはあまり詳しく説明していないのですか? – GertR

関連する問題