C# 从Dropdownlist模型中获取发布的ID,该模型未包含在modelview中
当我尝试将发布的信息插入到与“银行”有直接关系的模型中时,它工作得非常好 直接模型的代码段,可以很好地处理自动实现的CRUD操作C# 从Dropdownlist模型中获取发布的ID,该模型未包含在modelview中,c#,asp.net-mvc,entity-framework,razor,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Razor,Asp.net Mvc 5,当我尝试将发布的信息插入到与“银行”有直接关系的模型中时,它工作得非常好 直接模型的代码段,可以很好地处理自动实现的CRUD操作 public class Organization { public int ID { get; set; } .... [Display(Name = "Bank:")] public int BankID { get; set; } public virtual Bank Bank { get; set; } ...
public class Organization
{
public int ID { get; set; }
....
[Display(Name = "Bank:")]
public int BankID { get; set; }
public virtual Bank Bank { get; set; }
....
}
public class Bank
{
public int ID { get; set; }
[Display(Name = "Bank")]
public string Title { get; set; }
}
控制器:
public ActionResult Create()
{
ViewBag.BankID = new SelectList(db.Banks, "ID", "Title");
....
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Organization organization)
{
if (ModelState.IsValid)
{
organization.OrganizationStatusID = 1;
db.Organizations.Add(organization);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.BankID = new SelectList(db.Banks, "ID", "Title", organization.BankID);
....
return View(organization);
}
但我面临的问题是,当我试图通过以下方式实施它时:
public class _OrganizationUserSignedBy
{
public int ID { get; set; }
public Organization Organization { get; set; }
....
}
此ModelView仅在Dropdownlist中显示银行信息,尽管当通过“提交”按钮发布信息时,它会给我一个错误,即bankID不能为空。我测试了它是否有效,如果我手动插入所有选择的dropdownlist项都是1(例如:_OrganizationUserSignedBy.Organization.BankID=1;),它工作正常。问题是在我的ModelView中没有正确接收已发布的信息
Modelview代码段:
控制器
public ActionResult Create()
{
ViewBag.BankID = new SelectList(db.Banks, "ID", "Title");
....
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(_OrganizationUserSignedBy _OrganizationUserSignedBy)
{
if (ModelState.IsValid)
{
_OrganizationUserSignedBy.Organization.OrganizationStatusID = 1;
db.Organizations.Add(_OrganizationUserSignedBy.Organization);
_OrganizationUserSignedBy.Organization.BankID = 1;
....
db.SaveChanges();
_OrganizationUserSignedBy.User.OrganizationID = db.Organizations.Max(x => x.ID);
_OrganizationUserSignedBy.SignedBy.OrganizationID = db.Organizations.Max(x => x.ID);
db.Users.Add(_OrganizationUserSignedBy.User);
db.SignedBys.Add(_OrganizationUserSignedBy.SignedBy);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.BankID = new SelectList(db.Banks, "ID", "Title", _OrganizationUserSignedBy.Organization.BankID);
....
return View(_OrganizationUserSignedBy);
}
创建视图:
@model MVC_CPO_REGRELEASE.Models._OrganizationUserSignedBy
....
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
....
@Html.LabelFor(model => model.Organization.BankID, "*Banko pavadinimas:")
@Html.DropDownList("BankID", null, "Pasirinkite...")
@Html.ValidationMessageFor(model => model.Organization.BankID)
一周来我一直在寻找解决办法,但我找不到解决办法。。如果您现在或将来有任何建议,我将不胜感激。谢谢大家!
PS:一些代码被删除了,因此您不需要太长时间就能理解问题所在。您创建的
元素具有与模型无关的名称属性。例如,第一个是
<select name="BankID" .... >
在控制器中
public ActionResult Create()
{
OrganizationUserSignedByVM model= new OrganizationUserSignedByVM();
ConfigureViewModel(model);
return View(model);
}
public ActionResult Create(OrganizationUserSignedByVM model)
{
if (!ModelState.IsValid)
{
ConfigureViewModel(model);
return View(model);
}
// initialise a new instance of your data model(s) and save
// redirect
}
private void ConfigureViewModel(OrganizationUserSignedByVM model)
{
model.BankList = new SelectList(db.Banks, "ID", "Title");
....
}
在我看来
@model yourAssembly.OrganizationUserSignedByVM
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.SelectedBank)
@Html.DropDownListFor(m => m.SelectedBank, Model.BankList, "-Please select-")
@Html.ValidationMessageFor(m => m.SelectedBank)
....
<input type="submit" value="Save" />
}
@model yourAssembly.OrganizationUserSignedByVM
@使用(Html.BeginForm())
{
@LabelFor(m=>m.SelectedBank)
@Html.DropDownListFor(m=>m.SelectedBank,Model.BankList,“-请选择-”)
@Html.ValidationMessageFor(m=>m.SelectedBank)
....
}
@model yourAssembly.OrganizationUserSignedByVM
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.SelectedBank)
@Html.DropDownListFor(m => m.SelectedBank, Model.BankList, "-Please select-")
@Html.ValidationMessageFor(m => m.SelectedBank)
....
<input type="submit" value="Save" />
}