繁体   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