簡體   English   中英

C#MVC從一個視圖向相關表添加記錄

[英]C# MVC add records to related table from one view

我的C#知識背景為0。我正在嘗試學習它。 我只是不確定如何使用正確的單詞進行搜索。 所以我在呼救!

我有一個使用MVC框架的小型ASP.Net Web應用程序。 我有一個數據庫,其中包含三個表CompanyTerritory ,第三個是關系表TerritoryCompany 因此,基本設置是:一個Company可以在多個Territory設有分支機構,而一個Territory可以擁有多個Company 這種關系是Many-Many

我所擁有的是一個CS代碼,可以讓您創建一家公司,沒什么特別的,

    public void Save(CompanyModel company)
    {
        using (var db = new SampleDbContext())
        {
            Company entity;
            if (company.CompanyId > 0)
            {
                entity = db.Companies.First(x => x.Id == company.CompanyId);
            }
            else
            {
                entity = new Company();
                db.Companies.Add(entity);
            }

            entity.Name = company.CompanyName;
            entity.PhoneNo = company.PhoneNo;
            //What should I do?
            db.SaveChanges();
        }
    }

現在如您所見,我可以添加公司名稱和電話號碼。 好。 這是我在網頁中使用的代碼,

@model PEF.SampleTesting.Domain.CompanyModel
@{
    ViewBag.Title = "Add";
}
@using (Html.BeginForm("Save", "Companies"))
{
    @Html.EditorForModel()
    <label>Enter the list of service area</label><br />
    <input id="ServiceArea" class="form-control" name="testBox" value="eg. BS1, BA5" /><br/>
    <button type="Submit" class="btn btn-primary">Save</button>
}

這是CompaniesController

    [HttpPost]
    public ActionResult Save(CompanyModel model)
    {
        if (!ModelState.IsValid) return View((model.CompanyId == 0)?"Add":"Edit",  model);

        _companyService.Save(model);

        return RedirectToAction("Index");
    }

我想做的是,在進行保存更改之前,先執行db.SaveChanges(); 創建公司時,我想

  • 為“ Territory添加這些條目-如果“領土”表中不存在該Territory
  • 要么
  • 在關系表中為該公司ID和該特定公司的對應TerritoryID( )創建一個條目。

我創建了一個TextBox ,它將獲得用逗號分隔的區域條目。 在For中使用此TextBox值,並為表Territory創建盡可能多的實體(可能使用for循環和拆分功能)。

我的問題;

  1. 如何將表單值(TextBox)傳遞回代碼?
  2. 如何使用For循環將此“ n”個條目添加到TerritoryCompany表中?

任何幫助或步驟將不勝感激。

通常,不用將數據實體傳遞給視圖,而是創建一個視圖模型,這將為您提供更大的靈活性。

類似於此類“ AddCompanyViewModel”,它為您的公司提供一個屬性,並為您的逗號分隔的領土字符串提供一個屬性...

現在,您也將通過控制器而不是實體類型傳遞此viewmodel ...這是一種常見情況,因為您的數據庫結構很少會與您的域層(業務層)完全匹配...視圖模型實質上是對視圖進行建模。

public class AddCompanyViewModel
{
    public CompanyModel Company { get; set; }
    public string Territories { get; set; }
}


[HttpPost]
public ActionResult Save(AddCompanyViewModel model)
{
    if (!ModelState.IsValid)
        return View((model.Company.CompanyId == 0)?"Add":"Edit",  model);

    _companyService.Save(model.Company);

    // Do something with territories...
    var territories = model.Territories.Split(',');

    return RedirectToAction("Index");
}
  1. 您可以將FormCollection參數用於操作。

    公共ActionResult保存(CompanyModel模型,FormCollection formCol)

通過name屬性引用文本框。

  1. 不確定您要的是什么。 拆分文本框值后,可以使用Foreach循環遍歷每個區域。 然后,您創建TerritoryCompany模型並進行相應保存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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