[英]C#- ASP.net MVC 3- Inserting multiple rows into table
我今年是ASP.net MVC的新手。
問題如何實現可接受多次插入數據庫的方法/模型類/視圖?
我知道我將不得不使用模型綁定技術,但我不確定如何在我的項目中實現它。
建議的答案一個解決方案是一個使用多個插入實現視圖的簡單示例/模板。 (控制器,型號,視圖代碼示例)
Sceanrio示例 :我有一個產品表,我想插入/創建11種產品類型。 因此,在我的方法/視圖中插入11次產品表。
我一直在研究探索可能的解決方案,使用:
https://stackoverflow.com/search?q=model+binding+to+a+collection
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
這些是有用的,但對我的問題沒有幫助。
如果有人可以就此問題向我提出建議,我將非常感激。 感謝您的時間
首先,我同意@AndrewCounts。 你的問題相當廣泛,很難提供高質量的答案。 但是,我可以給你一些一般的指導,希望能幫到你。
一般來說,如果您正在談論插入多行,那么您實際上只是在談論提供一個帶有一組重復字段的表單,這些字段作為對象列表提交。 如果您有定義數量的項目,則可以將對象列表作為視圖的模型傳遞:
GET行動
public ActionResult CreateMyModels()
{
var myModels = new List<MyModel>();
for (var i = 0; i < totalItems; i++)
{
myModels.Add(new MyModel());
}
return View(myModels)
}
視圖
@model List<Namespace.To.MyModel>
@using (Html.BeginForm())
{
for (var i = 0; i < Model.Count(); i++)
{
// Model fields here, i.e.
// @Html.EditorFor(m => m[i].SomeField)
}
<button type="submit">Submit</button>
}
使用是很重要for
,而不是foreach
在這里,讓你得到一個索引。 如果您將索引項目傳遞給Html.EditorFor
類的Html.EditorFor
,Razor將正確生成字段名稱,以便將它們作為列表發布。
如果您有未定義或可變數量的項目,那么您負責生成正確的字段名稱。 對於項目列表中的字段的name
屬性,modelbinder需要以下格式:
ListName[index].FieldName
如果您的POST操作簽名如下所示:
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)
然后你的字段需要命名如下:
myModels[0].FirstField
myModels[0].SecondField
...
myModels[1].FirstField
...
在用於向頁面呈現字段集的JavaScript中,您需要確保正確設置name
屬性。
無論您采用哪種方法,您的POST操作都是相同的。 你會收到一份清單,你需要插入每一個。 我將為此示例假設實體框架,因為大多數MVC應用程序將使用它。 您需要明顯修改此代碼以適合您自己的情況:
[HttpPost]
public ActionResult CreateMyModels(List<MyModel> myModels)
{
if (ModelState.IsValid)
{
foreach (var myModel in myModels)
{
db.MyModels.Add(myModel);
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(myModels);
}
[HttpPost]
public ActionResult Index(List<Employee> employees)
{
CompanyEntities DbCompany = new CompanyEntities();
foreach (Employee Emp in employees)
{
Employee Existed_Emp = DbCompany.Employees.Find(Emp.ID);
Existed_Emp.Name = Emp.Name;
Existed_Emp.Gender = Emp.Gender;
Existed_Emp.Company = Emp.Company;
}
DbCompany.SaveChanges();
return View();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.