绑定dropdownlistFor时发生问题。提交值时抛出Null异常

时间:2019-04-24 13:59:12

标签: model-view-controller nullreferenceexception html.dropdownlistfor

我正在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>

0 个答案:

没有答案