[HttpPost]之后DropDownListFor上出现NullReferenceException

本文关键字:NullReferenceException DropDownListFor HttpPost 之后 | 更新日期: 2023-09-27 17:58:04

在我的应用程序中,我正在使用ADO实体框架从数据库中填充一个下拉列表,之后当我尝试提交表单时,下拉列表的值会给出Null引用异常。

错误代码(在INDEX.ASPX中)

<%: Html.DropDownListFor(model => model.race, Model.Races, "--Select--")%>  <--error
<%: Html.ValidationMessageFor(model => model.race)%>

控制器(在NewPersonController中)

public ActionResult Index()
        {
            Person person= new Person();
            return View(new PersonFormViewModel(person));   
        }

[HttpPost]
public ActionResult Index(Person person)
        {
            if (ModelState.IsValid) //Also not enter the race parameter
            {
                personRepo.Add(person);
                personRepo.Save();
            }
            return View();  // When return the view I get the error
        }

模型(在PersonFormViewModel中)

public class PersonFormViewModel
    {

        public Person Person        {
            get;
            private set;
        }
        public SelectList Races
        {
            get;
            private set;
        }
        public string race
        {
            get { return Person.race; }
            set { Person.race = value; }
        }

        public PersonFormViewModel(Person person)
        {
            Person = person;
            RaceRepository repository = new RaceRepository();
            IList<Race> racesList= repository.FindRaces().ToList();
            IEnumerable<SelectListItem> selectList =
                from c in racesList
                select new SelectListItem
                {
                    Text = c.race,
                    Value = c.id.ToString()
                };
            Races = new SelectList(selectList, "Value", "Text");   
        }
    }

在验证模型中

[MetadataType(typeof(Person_Validation))]
public partial class Person    {
}
    public class Person_Validation
    {
        [Required(ErrorMessage = "Required race")]
        public string race
        {
            get;
            set;
        }
    }

你能帮我吗?非常感谢。

[HttpPost]之后DropDownListFor上出现NullReferenceException

在POST方法中,您必须为视图提供相同类型的模型。

        [HttpPost]
        public ActionResult Index(Person person)
        {
            if (ModelState.IsValid)
            {
                personRepo.Add(person);
                personRepo.Save();
            }
            return View(new PersonFormViewModel(person));
        }

您没有在post操作中传递ViewModel。

[HttpPost]
public ActionResult Index(Person person)
{
    if (ModelState.IsValid) //Also not enter the race parameter
    {
        personRepo.Add(person);
        personRepo.Save();
    }
    return View(new PersonFormViewModel(person));
}

或者

[HttpPost]
public ActionResult Index(Person person)
{
    if (ModelState.IsValid) //Also not enter the race parameter
    {
        personRepo.Add(person);
        personRepo.Save();
    }
    return RedirectToAction("Index");
}