首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编辑和创建视图中保存MultiSelectList中的数据

在编辑和创建视图中保存MultiSelectList中的数据
EN

Stack Overflow用户
提问于 2010-02-02 01:41:16
回答 1查看 513关注 0票数 1

我有3个表:公司、分包合同和CompanyToSubcontract

CompanyToSubcontract表是公司的guid和委外合同的guid。我有一个关于委外编辑和创建视图的MultiSelectList,用户可以在其中选择多个公司。我终于让它工作了,它显示了在Subcontract视图中选择的正确公司。我在保存数据方面没有问题。

在create视图中,分包合同在写入Sql数据库之前没有guid,那么如何获得guid保存到CompanyToSubcontract表中呢?

另外,在编辑视图中,我做了一些错误的事情。它不会save.the公司的选择。我还需要删除未选中的公司的记录。做这件事最好的方法是什么?

我按照NerdDinner教程获得了我的基本结构,现在我正在尝试更新以满足我的需求。

谁能给我指个方向?

在SubcontractRepository中:

代码语言:javascript
复制
public void Save()
    {
        db.SubmitChanges();
    }

在控制器中:

代码语言:javascript
复制
 [AcceptVerbs(HttpVerbs.Post), Authorize]
    public ActionResult Edit(string id, FormCollection formValues)
    {
        // Retrieve existing subcontract
        subcontract subcontract = subcontractRepository.GetSubcontract(id);

        if (subcontract == null)
            return View("NotFound");
        else
        {
            try
            {
                UpdateModel(subcontract);

                IEnumerable<Guid> selectedCompanies = Request.Form["Companies"].Split(new Char[] { ',' }).Select(idStr => new Guid(idStr));

                foreach (var item in selectedCompanies)
                {
                    CompanyToSubcontract cs = new CompanyToSubcontract();
                    cs.subcontract_id = subcontract.subcontract_id;
                    cs.company_id = item;
                    subcontractRepository.Save();
                }


                subcontract.lastupdate_date = DateTime.Now;
                subcontract.lastupdatedby_user = User.Identity.Name;

                //Persist changes back to database
                subcontractRepository.Save();

                //Perform HTTP redirect to details page for the saved subcontract
                return RedirectToAction("Details", new { id = subcontract.subcontract_no });
            }
            catch
            {
                ModelState.AddRuleViolations(subcontract.GetRuleViolations());

                return View(new SubcontractFormViewModel(subcontract));
            }

        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-02 06:34:41

在selectedCompanies foreach循环中,更改:

代码语言:javascript
复制
cs.subcontract_id = subcontract.subcontract_id;

至:

代码语言:javascript
复制
cs.subcontract = subcontract;

在我对this问题的回答中,详细解释了这种方式的原因。此外,LINQ- to -SQL还自动管理主键的分配及其对外键的传播。当您调用db.SubmitChanges()时,它会识别出如果subcontract对象没有分配外键,它会将其视为插入更改。此外,由于subcontract对象与CompanyToSubcontract对象相关联,因此它知道使用刚刚分配给Subcontract实体的主键值来更新关联实体中的外键字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2178754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档