Я загружаю строго типизированный выпадающий список в MVC.Этот список заполняется с использованием значений БД. Я получаю значение с помощью linq и сопоставляю их с моделью.Эта модель определена внутри основной модели представления, которую я использую для своего представления. Поскольку существует несколько моделей для одного представления, над которым я работаю.Когда страница загружается, DDL загружает свои значения правильно, но проблема наступает, пока я пытаюсь передать значение методу HTTPPost в контроллере.в результате эта ошибка «Ссылка на объект не установлена для экземпляра объекта.»
Я понимаю, что я пытаюсь получить доступ к свойству, которое является нулевым .. Но я не понимаю, как я могу связать 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; }
}
}
MainПросмотр модели
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>