gpt4 book ai didi

c# - 从不包含在模型 View 中的 Dropdownlist 模型获取发布的 ID

转载 作者:行者123 更新时间:2023-11-30 17:38:35 25 4
gpt4 key购买 nike

当我尝试将发布的信息插入到与“银行”有直接关系的模型时,它工作得很好。

适用于自动执行的 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; }
}

Controller :

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 不能为空。我测试了如果我手动插入所有选择的下拉列表项都为 1(例如:_OrganizationUserSignedBy.Organization.BankID = 1;)它是否有效,它工作正常。问题是发布的信息没有在我的 ModelView 中正确接收。

模型 View 代码片段:

Controller

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);
}

创建 View :

@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>具有与您的模型无关的名称属性的元素。例如第一个是

<select name="BankID" .... >

但是您的模型没有名为 BankID 的属性(尽管它确实有一个名为 Organization 的属性,它似乎有一个名为 BankID 的属性。

尽管您声称,您的第一个实现也无法正常工作。您不能对绑定(bind)到的属性和 SelectList 的名称使用相同的名称(例如,您不会获得客户端验证)并且您应该始终对包含表单的 View 使用 View 模型(并且该 View 模型将包含每个 SelectList 属性的属性)。此外,您不应绑定(bind)到数据模型的属性。如果 Organization 的任何属性具有验证属性,ModelState将无效。

你的 View 模型应该是

public class OrganizationUserSignedByVM
{
public int? ID { get; set; } // so you can use it in an edit view as well
[Display(Name = "Bank")]
[Required(ErrorMesage = "Please select a bank")]
public int SelectedBank { get; set; }
public SelectList BankList { get; set; }
.....
}

在 Controller 中

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");
....
}

在 View 中

@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" />
}

关于c# - 从不包含在模型 View 中的 Dropdownlist 模型获取发布的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566800/

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