【问题标题】:Using Html.DropDownListFor to list data from one table, but save it to another使用 Html.DropDownListFor 列出一个表中的数据,但将其保存到另一个表
【发布时间】:2013-02-19 16:43:01
【问题描述】:

在“创建”操作中,我可以将信息添加到编辑器字段并将它们保存到 Table1,但是,对于其中一个字段,我想要一个下拉列表,从 Table2 中的列填充,然后可以选择并保存到Table1 中的一个字段,取决于选择。我已经设法在 Table2 的下拉表中显示信息,但没有将其传递给 Table1

模型1:

public int id { get; set; }
    public string JobNo { get; set; }
    public string DelNo { get; set; }
    public Nullable<int> DeptToPack { get; set; }
    public string PackNo { get; set; }
    public Nullable<decimal> TargetHrs { get; set; }
    public Nullable<System.DateTime> PackingDate { get; set; } 
    public virtual Table2 Table2{ get; set; }

模型 2:

public Table2()
{
    this.Table1= new HashSet<Table1>();
}

public int id { get; set; }
public string Dept { get; set; }
public virtual ICollection<Table1> Table1{ get; set; }

组合模型:

public class Combined
    {
        public Table1 Table1 { get; set; }
        public Table2 Table2{ get; set; }
     }

视图当前显示所有可以使用 SaveChanges() 编辑并保存到数据库的字段的文本编辑器;在 HomeController 上,在 Create 操作下

创建动作

public ActionResult Create()
        {


            IEnumerable<SelectListItem> items = _db.Table2
                .Select(c => new SelectListItem
                {
                    Value = c.Dept,
                    Text = c.Dept
                });

            ViewBag.Dropdownlist = items;


            return View();
        }


        [HttpPost]
        public ActionResult Create(Table1 table1)
        {
            if (ModelState.IsValid)
            {
                _db.Table1.Add(table1);
                _db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(table1);
        }

视图显示来自 table1 的信息,以及来自 table2 的一个字段。我似乎在使用 @Html.DropDownList 元素时遇到了问题

我目前有(下)显示数据,但无法处理到Table1

 @Html.DropDownList("Table1.Field1", (IEnumerable<SelectListItem>) ViewBag.DropDownList)

希望图像能更好地解释它,填充的输入框将保存到 Table1 除了 1 个字段,它是来自 Table2 列 {InfoToPass} 的下拉列表,其中可以选择 4 个选项中的 1 个,然后该值以及所有其他输入将保存到 Table1

【问题讨论】:

  • 您找到解决问题的方法了吗?如果可以,可以分享一下吗?
  • 我差不多搞定了,只是做一些调整,然后我会发布我的答案

标签: c# asp.net-mvc razor html-helper


【解决方案1】:

您需要创建一个 table1 对象并将相关值从传递给控制器​​的对象传递给它,然后对新的 table2 对象和与其相关的参数执行相同的操作。两者都正确填充后,保存到各自的表并保存更改。

整理完这两个对象后,你会以这样的方式结束保存:

_db.Table2.Add(table2);
_db.Table1.Add(table1);
_db.SaveChanges();

【讨论】:

    【解决方案2】:

    我的场景涉及连接几个表以提供某个列值(因此您可以忽略然后 linq 查询),这将显示在下拉列表中。然后,用户可以从下拉列表中选择值(如果有),然后可以将其保存到另一个表 (Table1)。

    创建视图:

        @model TharInfo2.Models.Combined
    
        <div class="editor-field">
        @Html.DropDownListFor(model => model.Table1.DelNo, (IEnumerable<SelectListItem>)ViewBag.Rev)
        </div>
    

    创建控制器:

            public ActionResult Create()
                {
                var rd = RouteData.Values["jobno"];
                var query = (from t in _db.table3
                             join d in _db.table2 on t.delivery_number equals d.ID
                             join m in _db.table4 on d.OrderNo equals m.JobNo
                             where m.JobNo == rd
                             select new
                                  {
                                      t.rev_delivery_number
                                  });
    
    
                 IEnumerable<SelectListItem> rev_del = query
                            .Select(c => new SelectListItem
                            {
                                Value = c.rev_delivery_number,
                                Text = c.rev_delivery_number
                            });
    
    
                 ViewBag.Rev = rev_del;
    
    
                 return View();
                 }
    
    
    
    
                    [HttpPost]
                    public ActionResult Create(Table1 table1)
                    {
    
    
    
                        if (ModelState.IsValid)
                        {
                            _db.Table1.Add(table1);
                            _db.SaveChanges();
                            return RedirectPermanent("Index");
    
    
                        }
    
                        return View(table1);
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      相关资源
      最近更新 更多