SQL Serverに2テーブル、テーブル1およびテーブル2があります。次のMODEL、CONTROLLER、VIEWを使用して、www.example.com/Table/Details/1にtable1とtable2のレコードを表示することができます。MVCで複数のモデルが1つのビューにあるときにレコードをSQL Serverに挿入する方法
MODEL
namespace example.Models
{
public class table1
{
public int id { get; set; }
public string column1{ get; set; }
}
public class table2
{
public int id { get; set; }
public string column1 { get; set; }
}
public class tables
{
public IEnumerable<table1> table1{ get; set; }
public IEnumerable<table2> table2{ get; set; }
}
public class example_db : DbContext
{
public DbSet<table1> foo { get; set; }
public DbSet<table2> bar { get; set; }
}
}
CONTROLLER
namespace example.com.Controllers
{
public class ContentController : Controller
{
private example_db db = new example_db();
//GET: Content/Details/1
public ActionResult Details(int id)
{
using (var db = new example_db())
{
var model = new tables()
{
table1 = db.table1.Where(x => x.id.Equals(id)).ToList(),
table2 = db.table2.Where(x => x.id.Equals(id)).ToList()
};
return View(model);
}
}
}
}
VIEW www.example.com/Content/Details/1で
@model example.Models.tables
@foreach (var item in Model.table1)
{
@Html.DisplayFor(x => item.column1)
}
@foreach (var item in Model.table2)
{
@Html.DisplayFor(x => item.column1)
}
、TABLE1および表2からのデータが表示されます。この例では、FOOはTABLE1であり、かつバーは、table2のです。
私はtable2のにレコードを挿入しますwww.example.com/Content/Details/1にフォームを追加したいです。私はCONTROLLERにこれを追加しました:
// POST: Content/Details/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Details([Bind(Include = "id,column1")] tables tables)
{
if (ModelState.IsValid)
{
db.table2.Add(tables);
db.SaveChanges();
}
return View(tables);
}
Visual Studioでプロジェクトをビルドしようとすると、このエラーが表示されます。CS1503引数1は:WWW」に「www.example.com.Models.tables」から変換することはできません。 example.com.Models.table2'
私はtable2のにレコードを挿入できるように、CONTROLLERを調整する方法がわからないです。
EDIT:
私はCONTROLLER(表におけるキャピタル・ "T")に次のように試してみました。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Details(Tables tables)
{
if (ModelState.IsValid)
{
db.table2.Add(tables.table2);
db.SaveChanges();
}
return View(tables);
}
プロジェクトを構築するとき、私はこのエラーを取得:(CS1061「テーブル」は「table2の」の定義が含まれていないと何の拡張メソッド「表2」タイプの最初の引数を受け入れる「テーブル」は見つかりませんでしたあなたがusingディレクティブまたはアセンブリ参照が不足している?)
を私は私のCONTROLLER テーブル中(小文字の「T」)に次のように試してみました。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Details(tables tables)
{
if (ModelState.IsValid)
{
db.table2.Add(tables.table2);
db.SaveChanges();
}
return View(tables);
}
プロジェクトを構築するとき、私はこのエラーを取得:(CS1061「テーブル」は「table2の」の定義が含まれていないと何の拡張メソッド「表2」タイプの最初の引数を受け入れる「テーブル」は見つかりませんでしたあなたがusingディレクティブまたはアセンブリ参照が不足している?)私は表2に私CONTROLLER(キャピタル・「T」で、次の試してみました
)。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Details([Bind(Include = "id,column1")] Table2 table2)
{
if (ModelState.IsValid)
{
db.table2.Add(table2);
db.SaveChanges();
}
return View(tables);
}
プロジェクトを構築するとき、私はこのエラーを取得:「テーブルは」私は(私のCONTROLLERに次のように試してみました
指定されたコンテキストで有効でないタイプであり、小文字の「t」はテーブル2です)。プロジェクトを作成するとき
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Details([Bind(Include = "id,column1")] table2 table2)
{
if (ModelState.IsValid)
{
db.table2.Add(table2);
db.SaveChanges();
}
return View(tables);
}
、私はこのエラーを取得する:CS0246型または名前空間「table2の」が見つかりませんでした(?あなたがusingディレクティブまたはアセンブリ参照が不足している)
あなたはC#の新機能のようです。'db.table1.addRange(tables.table1)'のように 'tables'とは別に各テーブルレコードを追加する必要があります。 –
この度はお勧めします。オリジナルの投稿にEDITを追加しました。 – JeremyCanfield