【发布时间】:2016-08-02 16:24:48
【问题描述】:
当我尝试将发布的信息插入与“银行”有直接关系的模型时,它工作得非常好。
直接模型的代码 sn-ps 可以很好地与自动实现的 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 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; }
....
}
此模型视图仅在下拉列表中显示银行信息,尽管当通过“提交”按钮发布信息时,它给我一个错误,即银行 ID 不能为空。如果我手动插入所有选择的下拉列表项都是 1(例如:_OrganizationUserSignedBy.Organization.BankID = 1;),我测试了它是否工作正常。问题是我的模型视图中没有正确接收到发布的信息。
模型视图代码sn-ps:
控制器
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:部分代码被剪掉了,所以你不会花太长时间就明白问题出在哪里。
【问题讨论】:
标签: c# asp.net-mvc entity-framework razor asp.net-mvc-5