gpt4 book ai didi

c# - ASP.NET MVC 下拉列表数据不插入

转载 作者:太空宇宙 更新时间:2023-11-03 21:51:05 25 4
gpt4 key购买 nike

我有两个模型,我想在数据库中插入一行,并在 DropDownList 中填充外键关系。 Item 模型的数据插入没有问题,但 ManufacturerID 没有插入(它插入 null)。我找不到原因。更新:将项目上传到:http://mvcapplication2.codeplex.com/

<div class="editor-label">
@Html.LabelFor(model => model.ManufacturerID,"Manufacturer")
</div>

<div class="editor-field">
@Html.DropDownList("ManufacturerID",string.Empty)
@Html.ValidationMessageFor(model => model.ManufacturerID)
</div>

public class Item
{
public int ItemID { get; set; }
public string Serial { get; set; }
public string ItemName { get; set; }
public int? ManufacturerID { get; set; }
public Manufacturer Manufacturer { get; set; }
}

public class Manufacturer
{
public int ManufacturerID { get; set; }
public string ManufacturerName { get; set; }
public List<Item> Items { get; set; }
}

public ActionResult Create()
{
ViewBag.ManufacturerID = new SelectList(db.Manufacturers, "ManufacturerID", "ManufacturerName");
return View();
}

[HttpPost]
public ActionResult Create(Item ıtem)
{
if (ModelState.IsValid)
{
db.Items.Add(ıtem);
db.SaveChanges();
return RedirectToAction("Index");
}

return View(ıtem);
}

最佳答案

我宁愿不在 View 中使用领域模型。我会创建一些特定于 View 的 View 模型。此外,为了从操作方法(例如:下拉列表)传输数据,我会使用强类型方法,而不是动态 viewbag/viewdata 方法。

创建 View 模型类

public class CreateItemVM
{
public string SerialNumber { set;get;}
public int SelectedManufactureID { set;get;}
public List<SelectListItem> Manufacturers { set;get;}
public CreateItemVM()
{
Manufacturers =new List<SelectListItem>();
}
}

现在在您的 GET 操作方法中,创建我们 View 模型的对象,初始化相关值并发送到 View 。

public ActionResult Create()
{
var vm=new CreateItemVM();
vm.Manufacturers=GetManufacturerList();
return View(vm);
}
private List<SelectListItem> GetManufacturerList()
{
List<SelectListItem> manuList=new List<SelectListItem>();
manuList=(from p in db.Manufacturers
select new SelectListItem {
Value=p.ID.ToString(),
Text=p.Name}
).ToList();
return manuList;
}

现在在我们的 View 中,它是我们 Viewmodel 的强类型,

@model CreateItemVM
@using(Html.Beginform())
{
@Html.DropDownListfor(x=>x.SelectedManufactureID ,
Model.Manufacturers,"select")
<input type="submit" />
}

最后,在我们的 POST 操作方法中,我们将从发布的 View 模型中读取值并将其分配为我们的域对象的属性值并保存。选定的制造商 ID 值将在我们 View 模型的 SelectedManufactureID 属性中。

[HttpPost]
public ActionResult Create(CreateItemVM model)
{
if(ModelState.IsValid)
{
Item domainObject=new Item();
domainObject.ManufacturerID =model.SelectedManufactureID ;
//set other relevant properties also
db.Items.Add(ıtem);
db.SaveChanges();
return RedirectToAction("Index");
}
// reload the dropdown before returning to the view
model.Manufacturers=GetManufacturerList();
return View(model);
}

关于c# - ASP.NET MVC 下拉列表数据不插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com