我正在mvc中加载一个强类型的dropdownlist。此列表使用DB值填充。我使用linq获取值并将其映射到模型。这个模型是在我用于视图的主视图模型中定义的。因为我正在处理一个视图的多个模型。 当页面被加载时,DDL正在正确加载它的值,但是当我尝试将值提交到控制器中的HTTPPost方法时,问题就来了。 导致此错误“对象引用未设置为对象的实例。”
我了解我正在尝试访问一个为null的属性。但是我没有得到如何将DDL绑定到属性的信息,这样我就不会收到此错误。对于这个DropDownListFor绑定过程,我还很陌生。 我也曾尝试过其他论坛。.但是我认为,如果我不了解错误的地方,最好先复制代码。
用于保存数据的ViewModel
namespace ProjectDAL.Models.ViewModels
{
public class SysTemViewModel
{
public int EmpID { get; set; }
public int SysID { get; set; }
public string SysName { get; set; }
}
}
主视图模型
namespace ProjectDAL.Models.ViewModels
{
public class MainViewModel
{
public IEnumerable<SysTemViewModel> SysNameForDDL { get; set; }
public string SysName { get; set; }
}
}
操作以加载DDL
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
MainViewModel mainVM = new MainViewModel();
IEnumerable<SysTemViewModel> sysVM = null;
sysVM = from s in dbEntities.EmpSystems
.Where(x => x.Used == false)
select new SysTemViewModel() { SysID = s.SysID, SysName = s.SysName };
mainVM.SysNameForDDL = sysVM.ToList();
return View(mainVM);
}
}
DDL->将数据提交到数据库的操作
[HttpPost]
public ActionResult CreateSysEntry([Bind(Include = "EmpID,SysID,SysName")] EmpAssignedSystems EAS, MainViewModel MVM)
{
try
{
EAS.EmpID = MVM.Employees.FirstOrDefault().EmpID;
EAS.ID = MVM.SysName;
EAS.System = MVM.SysID;
dbEntities.EmpAssignedSystems.Add(EAS);
dbEntities.SaveChanges();
}
return View(/////I am not sure which model to pass here);
}
catch
{
return View();
}
}
查看
@model ProjectDAL.Models.ViewModels.MainViewModel
<div>
@using (Html.BeginForm())
{
<div class="row">
<div class="col-md-6">
<form id="system-form" method="post" enctype="multipart/form-data">
<div class="form-body">
<div class="form-group">
<label>System Name</label>
<div class="input-group" style="width:50%">
@Html.DropDownListFor(model => model.SysNameForDDL.FirstOrDefault().SysID, new SelectList(Model.SysNameForDDL, "SysID", "SysName"), new { @class = "form-control", @id="sysDDL" })
</div>
</div>
<div class="form-group">
<label>System ID</label>
@Html.EditorFor(model => model.SysName, new { htmlAttributes = new { @class = "form-control", @id="SysIDAdded" } })
</div>
</div>
<div class="form-actions center">
<button type="submit">
Save
</button>
</div>
</form>
</div>
</div>
}
</div>
<script>
$(document).ready(function () {
$('#system-form').on('submit', function (e) {
e.preventDefault();
//var getDDLVal = $("#sysDDL").val();
var e = document.getElementById("sysDDL");
var getDDLVal = e.options[e.selectedIndex].value;
var getSysIDVal = $("#SysIDAdded").val();
var getCurrentId = @Model.Employees.FirstOrDefault().EmpID;
$.ajax({
type: "POST",
url: "/ProjectUser/CreateSysEntry",
data: {
systemName: getDDLVal,
systemID: getSysIDVal,
EmpID: getCurrentId,
submit: "true"
}
});
});
})
</script>