我有一个下拉列表,这个值来自另一个表,因此在此下拉列表中选择的值插入到另一个表中
<div class="col-lg-4">
<fieldset class="form-group">
@Html.LabelFor(model => model.CompanytypeID, new { @class = "form-label semibold" })
@Html.DropDownList("CompanyType", null, "--- Select CompanyType Name ---", new { @class = "select2-arrow" })
@Html.ValidationMessageFor(model => model.CompanytypeID, "", new { @style = "color:red" })
</fieldset>
</div>
public void CompanyType_Bind()
{
DataSet ds = dDSP.Get_CompanyType();
List<SelectListItem> companylist = new List<SelectListItem>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
companylist.Add(new SelectListItem { Text = dr["CompanyType"].ToString(), Value = dr["CompanytypeID"].ToString() });
}
ViewBag.CompanyType = companylist;
}
public DataSet Get_CompanyType()
{
SqlCommand cmd = new SqlCommand("Select * From UserType", constr);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
答案 0 :(得分:0)
您没有将代码的下拉列表绑定到部门模型的任何属性。
@Html.DropDownList("CompanyType", null, "--- Select CompanyType Name ---", new { @class = "select2-arrow" })
将生成名为CompanyType的select元素。
您可以在Validator代码中看到要将其绑定到CompanytypeID
最简单的方法是将Dropdown声明更改为DropDownListFor并将其“绑定”到CompanytypeID
<div class="col-lg-4">
<fieldset class="form-group">
@Html.LabelFor(model => model.CompanytypeID, new { @class = "form-label semibold" })
@Html.DropDownListFor(m => m.CompanytypeID, ViewBag.CompanyType as IEnumerable<SelectListItem>, "--- Select CompanyType Name ---", new { @class = "select2-arrow" })
@Html.ValidationMessageFor(model => model.CompanytypeID, "", new { @style = "color:red" })
</fieldset>
</div>
很高兴看到你的整个cshtml页面。
我还建议使用ViewModels。看起来你正在回复你的实体模型,这就是你把这个列表放在ViewBag中的原因。
答案 1 :(得分:0)
您的SELECT元素名称应与您的属性名称匹配。使用当前代码,您将生成名为&#34; CompanyType&#34;的select元素,但在您的视图模型(Department
)中,您的属性名称为CompanyTypeId
。
要使模型绑定起作用,输入元素名称应与属性名称匹配。因此,对SELECT元素使用相同的名称,你应该很好。
@Html.DropDownListFor(x=>x.CompanyTypeId, ViewBag.CompanyType as List<SelectListItem>,
"Select CompanyType", new { @class = "select2-arrow" })
更进一步,不要发布链接到代码的图像。而是在问题本身中包含相关代码。