簡體   English   中英

C# - ASP.net MVC 3-在表中插入多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM