简体   繁体   English

ASP.NET Core 5 MVC:ArgumentNullException:值不能为空。 (参数“项目”)

[英]ASP.NET Core 5 MVC: ArgumentNullException: Value cannot be null. (Parameter 'items')

I have this list in the GET method for a create page:我在创建页面的 GET 方法中有这个列表:

List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;

It is displayed like this:它显示如下:

<div class="form-group col-md-4">
    <label class="control-label">Prepared By</label>
    <select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="@(new SelectList(ViewBag.users))"></select>
    <span asp-validation-for="Prepared_By" class="text-danger"></span>
</div>

In the model Prepared_By is a string.在模型Prepared_By是一个字符串。

On the create page when I hit submit I get the following error:在我点击提交时的创建页面上,我收到以下错误:

ArgumentNullException: Value cannot be null. ArgumentNullException:值不能为空。 (Parameter 'items') (参数“项目”)

pointing to指向

<select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="@(new SelectList(ViewBag.users))"></select>

There are a couple things I find really interesting about this issue.关于这个问题,我觉得有几件事非常有趣。 First of all, in the POST method for the create page if I print the value of Prepared_By it always prints the correct name:首先,在创建页面的 POST 方法中,如果我打印Prepared_By的值,它总是打印正确的名称:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
{
    System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);

    if (ModelState.IsValid)
    {
        typeOne.Adduser = User.Identity.Name;
        typeOne.Date_Added = DateTime.Today;

        System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);

        _context.Add(typeOne);
        await _context.SaveChangesAsync();
    }
}

However when I try to print it a second time inside the if(ModelState.IsValid) it does not work.但是,当我尝试在if(ModelState.IsValid)再次打印它时,它不起作用。

What else is interesting is that I use this exact same list in a different create page and it works just fine:还有什么有趣的是,我在不同的创建页面中使用了这个完全相同的列表,它工作得很好:

<div class="form-group col-md-3">
    <label class="control-label">DSN PM</label>
    <select asp-for="DSN_PM" name="DSN_PM" class="form-control" asp-items="@(new SelectList(ViewBag.users))"></select>
    <span asp-validation-for="DSN_PM" class="text-danger"></span>
</div>
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Project_Name,County,Memo_Date,From,Authorization,DSN_PM,History,History_PM,Review_Exempt_H,SHPO_Approval_H,Archaeology,Archaeology_PM,Review_Exempt_A,SHPO_Approval_A,ESA_Key,Crayfish,Crayfish_Habitat_Assessment,NLEB_4D,USFWS,USFWS_Type,Mussel_Habitat,Mussel_Stream,Within_Airport,ToPo_Quad_Name,Bat_Habitat,Bars,Coordinates,Natural_Resources_Notes,Adduser,Date_Added,Crayfish_Notes,Mussel_Notes")] Project_Screen project_Screen)
{
    if (ModelState.IsValid)
    {
        project_Screen.Adduser = User.Identity.Name;
        project_Screen.Date_Added = DateTime.Today;

        _context.Add(project_Screen);

        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    return View(project_Screen);
}

In the second example I create the list in the exact same way in the GET method and I have never had this issue.在第二个示例中,我在 GET 方法中以完全相同的方式创建列表,但我从未遇到过这个问题。 What could be the problem?可能是什么问题呢?

EDIT: Update from question编辑:从问题更新

Controller:控制器:

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
        {
            System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
            if (ModelState.IsValid)
            {
                typeOne.Adduser = User.Identity.Name;
                typeOne.Date_Added = DateTime.Today;
                System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
                _context.Add(typeOne);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            //set the data for ViewBag.users..
            List<string> users = (from c in _context.NR_Users select c.Name).ToList();
            users.Insert(0, "Select");
            ViewBag.users = users;
            return View(typeOne);
        }

View:看法:

<div class="form-group col-md-4">
                    <label class="control-label">Prepared By</label>
                    <select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="@(new SelectList(ViewBag.users,"Id","Name"))"></select>
                    <span asp-validation-for="Prepared_By" class="text-danger"></span>
                </div>

There are a couple of problems here.这里有几个问题。 First of all, the problem persists and nothing has changed.首先,问题仍然存在,没有任何改变。 I'm not sure if the code for the view is correct at all, but it is giving me a Object reference not set to an instance of an object.我不确定视图的代码是否完全正确,但它给了我一个Object reference not set to an instance of an object. error but I don't really know what it's pointing to.错误,但我真的不知道它指的是什么。 I also don't know why you added ID because I don't use that anywhere and I don't need to.我也不知道你为什么添加 ID,因为我不会在任何地方使用它,我也不需要。

EDIT 2:编辑2:

GET method:获取方法:

// GET: TypeOnes/Create
        public IActionResult Create()
        {
            List<string> users = (from c in _context.NR_Users select c.Name).ToList();
            users.Insert(0, "Select");
            ViewBag.users = users;

            List<string> adminLeads = (from s in _context.NR_Users
                                      where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
                                      select s.Name).ToList();
            adminLeads.Insert(0, "Select");
            ViewBag.adminLeads = adminLeads.ToList();

            List<SelectListItem> options = new()
            {
                new SelectListItem { Value = "True", Text = "Yes" },
                new SelectListItem { Value = "False", Text = "No" }
            };
            options.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.options = options;

            List<SelectListItem> assessments = new()
            {
                new SelectListItem { Value = "Mussel", Text = "Mussel" },
                new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
                new SelectListItem { Value = "Both", Text = "Both" },
                new SelectListItem { Value = "No", Text = "No" }
            };
            assessments.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.options = assessments;

            List <SelectListItem> reTypes = new()
            {
                new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
                new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
                new SelectListItem { Value = "SHPO", Text = "SHPO" },
                new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
            };
            reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
            ViewBag.reTypes = reTypes;

            List <SelectListItem> counties = new()
            {
                new SelectListItem { Value = "Barbour", Text = "Barbour County" },
                new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
                new SelectListItem { Value = "Boone", Text = "Boone County" },
                new SelectListItem { Value = "Braxton", Text = "Braxton County" },
                new SelectListItem { Value = "Cabell", Text = "Cabell County" },
                new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
                new SelectListItem { Value = "Clay", Text = "Clay County" },
                new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
                new SelectListItem { Value = "Fayette", Text = "Fayette County" },
                new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
                new SelectListItem { Value = "Grant", Text = "Grant County" },
                new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
                new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
                new SelectListItem { Value = "Hancock", Text = "Hancock County" },
                new SelectListItem { Value = "Hardy", Text = "Hardy County" },
                new SelectListItem { Value = "Harrison", Text = "Harrison County" },
                new SelectListItem { Value = "Jackson", Text = "Jackson County" },
                new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
                new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
                new SelectListItem { Value = "Lewis", Text = "Lewis County" },
                new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
                new SelectListItem { Value = "Logan", Text = "Logan County" },
                new SelectListItem { Value = "Marion", Text = "Marion County" },
                new SelectListItem { Value = "Marshall", Text = "Marshall County" },
                new SelectListItem { Value = "Mason", Text = "Mason County" },
                new SelectListItem { Value = "McDowell", Text = "McDowell County" },
                new SelectListItem { Value = "Mercer", Text = "Mercer County" },
                new SelectListItem { Value = "Mineral", Text = "Mineral County" },
                new SelectListItem { Value = "Mingo", Text = "Mingo County" },
                new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
                new SelectListItem { Value = "Monroe", Text = "Monroe County" },
                new SelectListItem { Value = "Morgan", Text = "Morgan County" },
                new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
                new SelectListItem { Value = "Ohio", Text = "Ohio County" },
                new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
                new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
                new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
                new SelectListItem { Value = "Preston", Text = "Preston County" },
                new SelectListItem { Value = "Putnam", Text = "Putnam County" },
                new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
                new SelectListItem { Value = "Randolph", Text = "Randolph County" },
                new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
                new SelectListItem { Value = "Roane", Text = "Roane County" },
                new SelectListItem { Value = "Summers", Text = "Summers County" },
                new SelectListItem { Value = "Taylor", Text = "Taylor County" },
                new SelectListItem { Value = "Tucker", Text = "Tucker County" },
                new SelectListItem { Value = "Tyler", Text = "Tyler County" },
                new SelectListItem { Value = "Upshur", Text = "Upshur County" },
                new SelectListItem { Value = "Wayne", Text = "Wayne County" },
                new SelectListItem { Value = "Webster", Text = "Webster County" },
                new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
                new SelectListItem { Value = "Wirt", Text = "Wirt County" },
                new SelectListItem { Value = "Wood", Text = "Wood County" },
                new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
            };
            ViewBag.counties = counties;

            return View();
        }

If I recreate every list in the POST method then I don't get any errors anywhere, it simply sends me back to the create page and does not perform the database insert如果我在 POST 方法中重新创建每个列表,那么我不会在任何地方收到任何错误,它只会将我发送回创建页面并且不执行数据库插入

POST method: POST方法:

[HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, string Assessment, bool Bat)
        {
            List<string> users = (from c in _context.NR_Users select c.Name).ToList();
            users.Insert(0, "Select");
            ViewBag.users = users;

            List<string> adminLeads = (from s in _context.NR_Users
                                       where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
                                       select s.Name).ToList();
            adminLeads.Insert(0, "Select");
            ViewBag.adminLeads = adminLeads.ToList();

            List<SelectListItem> options = new()
            {
                new SelectListItem { Value = "True", Text = "Yes" },
                new SelectListItem { Value = "False", Text = "No" }
            };
            options.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.options = options;

            List<SelectListItem> assessments = new()
            {
                new SelectListItem { Value = "Mussel", Text = "Mussel" },
                new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
                new SelectListItem { Value = "Both", Text = "Both" },
                new SelectListItem { Value = "No", Text = "No" }
            };
            assessments.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.assessments = assessments;

            List<SelectListItem> reTypes = new()
            {
                new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
                new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
                new SelectListItem { Value = "SHPO", Text = "SHPO" },
                new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
            };
            reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
            ViewBag.reTypes = reTypes;

            List<SelectListItem> counties = new()
            {
                new SelectListItem { Value = "Barbour", Text = "Barbour County" },
                new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
                new SelectListItem { Value = "Boone", Text = "Boone County" },
                new SelectListItem { Value = "Braxton", Text = "Braxton County" },
                new SelectListItem { Value = "Cabell", Text = "Cabell County" },
                new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
                new SelectListItem { Value = "Clay", Text = "Clay County" },
                new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
                new SelectListItem { Value = "Fayette", Text = "Fayette County" },
                new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
                new SelectListItem { Value = "Grant", Text = "Grant County" },
                new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
                new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
                new SelectListItem { Value = "Hancock", Text = "Hancock County" },
                new SelectListItem { Value = "Hardy", Text = "Hardy County" },
                new SelectListItem { Value = "Harrison", Text = "Harrison County" },
                new SelectListItem { Value = "Jackson", Text = "Jackson County" },
                new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
                new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
                new SelectListItem { Value = "Lewis", Text = "Lewis County" },
                new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
                new SelectListItem { Value = "Logan", Text = "Logan County" },
                new SelectListItem { Value = "Marion", Text = "Marion County" },
                new SelectListItem { Value = "Marshall", Text = "Marshall County" },
                new SelectListItem { Value = "Mason", Text = "Mason County" },
                new SelectListItem { Value = "McDowell", Text = "McDowell County" },
                new SelectListItem { Value = "Mercer", Text = "Mercer County" },
                new SelectListItem { Value = "Mineral", Text = "Mineral County" },
                new SelectListItem { Value = "Mingo", Text = "Mingo County" },
                new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
                new SelectListItem { Value = "Monroe", Text = "Monroe County" },
                new SelectListItem { Value = "Morgan", Text = "Morgan County" },
                new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
                new SelectListItem { Value = "Ohio", Text = "Ohio County" },
                new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
                new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
                new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
                new SelectListItem { Value = "Preston", Text = "Preston County" },
                new SelectListItem { Value = "Putnam", Text = "Putnam County" },
                new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
                new SelectListItem { Value = "Randolph", Text = "Randolph County" },
                new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
                new SelectListItem { Value = "Roane", Text = "Roane County" },
                new SelectListItem { Value = "Summers", Text = "Summers County" },
                new SelectListItem { Value = "Taylor", Text = "Taylor County" },
                new SelectListItem { Value = "Tucker", Text = "Tucker County" },
                new SelectListItem { Value = "Tyler", Text = "Tyler County" },
                new SelectListItem { Value = "Upshur", Text = "Upshur County" },
                new SelectListItem { Value = "Wayne", Text = "Wayne County" },
                new SelectListItem { Value = "Webster", Text = "Webster County" },
                new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
                new SelectListItem { Value = "Wirt", Text = "Wirt County" },
                new SelectListItem { Value = "Wood", Text = "Wood County" },
                new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
            };
            ViewBag.counties = counties;




            System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);
            if (ModelState.IsValid)
            {
                typeOne.Adduser = User.Identity.Name;
                typeOne.Date_Added = DateTime.Today;
                System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);
                var prep = typeOne.Prepared_By;
                typeOne.Prepared_By = prep;
                _context.Add(typeOne);
                await _context.SaveChangesAsync();
                //Send all History and Archaeology Unit Leaders an email
                List<string> histAndArchLeads = (from s in _context.NR_Users
                                           where s.User_Type == "Unit Leader" && s.Unit == "History" || s.Unit == "Archaeology"
                                           select s.Email_Address).ToList();
                foreach(var email in histAndArchLeads)
                {
                    SendEmail(email);
                }
                //Send an email to Traci if project needs a Mussel or Crayfish habitat assessement (Natural resources Lead)
                if (Assessment != "No" )
                {
                    SendEmail("Cole.k.perry@wv.gov");
                }
                //Send an email to bat lady if project needs a bat habitat assessement
                if (Bat)
                {
                    SendEmail("Cole.k.perry@wv.gov");
                }
                return RedirectToAction(nameof(Index));
            }
            return View(typeOne);
        }

Can you please check the asp form.你能检查一下asp表单吗? It should be like this;应该是这样的;

<form asp-controller="MyController" asp-action="MyAction" method="post">
    <!-- Your controls and etc -->
</form>

Thanks谢谢

First of all, in the POST method for the create page if I print the value of Prepared_By it always prints the correct name首先,在创建页面的 POST 方法中,如果我打印 Prepared_By 的值,它总是打印正确的名称

Of course it will print the correct value, because you post the data to backend successfully.当然它会打印正确的值,因为您成功地将数据发布到后端。 But you need to know the dropdown populated data is not store by Prepared_By .但是您需要知道下拉填充的数据不是由Prepared_By存储的。 It stores value by using asp-items="@(new SelectList(ViewBag.users))" .它使用asp-items="@(new SelectList(ViewBag.users))"存储值。 You do not set the ViewBag.users in your post method, that is why you makes ArgumentNullException error when you post back.你没有在你的 post 方法中设置ViewBag.users ,这就是你在回发时出现ArgumentNullException错误的原因。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, bool Assessment)
{
    System.Diagnostics.Debug.WriteLine("Prepared by: " + typeOne.Prepared_By);

    if (ModelState.IsValid)
    {
        typeOne.Adduser = User.Identity.Name;
        typeOne.Date_Added = DateTime.Today;

        System.Diagnostics.Debug.WriteLine("Prepared by again: " + typeOne.Prepared_By);

        _context.Add(typeOne);
        await _context.SaveChangesAsync();
    }
    //set the data for ViewBag.users..
    List<string> users = (from c in _context.NR_Users select c.Name).ToList();
    users.Insert(0, "Select");
    ViewBag.users = users;
    //return View("ViewName", typeOne);
    //if you return Create.cshtml,  no need specify the view name
    return View(typeOne);
}

As for your second way, be sure debug your code and to see when it goes.至于您的第二种方式,请务必调试您的代码并查看它何时运行。 It is impossible if you do not set value for ViewBag.users when you populate the dropdown.如果您在填充下拉列表时没有为ViewBag.users设置值,这是不可能的。 Be carefull if any difference.如果有任何差异,请小心。

Here is a whole simple working demo:这是一个完整的简单工作演示:

Model:模型:

public class Test
{
    public string Id{ get; set; }
    public string Name { get; set; }
}

public class TestModel
{
    public string Prepared_By { get; set; }
}

View(Create.cshtml):查看(创建.cshtml):

Besides, you need use public SelectList(IEnumerable items, string dataValueField, string dataTextField);此外,您需要使用public SelectList(IEnumerable items, string dataValueField, string dataTextField); which will display the correct value and text for dropdown.这将显示下拉列表的正确值和文本。

model TestModel

<form method="post">
    <select asp-for="Prepared_By" name="Prepared_By" class="form-control" 
             asp-items="@(new SelectList(ViewBag.users,"Id","Name"))"></select>
    <input type="submit" value="Post" />
</form>

Controller:控制器:

[HttpGet]        
public IActionResult Create()
{

    var data = new List<User>()
    {
        new User(){ Id="1",Name= "aa" },
        new User(){ Id="2",Name= "bb" },
        new User(){ Id="3",Name= "cc" }               
    };
    ViewBag.users = data;
    return View();
}

public IActionResult Index(SuperModel model)
{
    ViewBag.users  = new List<Test>()
    {
        new Test(){ MenuCategoryId="1",Content= "aa" },
        new Test(){ MenuCategoryId="2",Content= "bb" },
        new Test(){ MenuCategoryId="3",Content= "cc" }
    };
    return View(model);
}

I figured it out.我想到了。 I abstracted the drop down lists to a 3rd method DropDowns() and then called that method in both the GET and POST methods:我将下拉列表抽​​象为第三个方法DropDowns() ,然后在 GET 和 POST 方法中调用该方法:

public void DropDowns()
        {
            List<string> users = (from c in _context.NR_Users select c.Name).ToList();
            users.Insert(0, "Select");
            ViewBag.users = users;

            List<string> adminLeads = (from s in _context.NR_Users
                                       where s.User_Type == "Admin" || s.User_Type == "Unit Leader"
                                       select s.Name).ToList();
            adminLeads.Insert(0, "Select");
            ViewBag.adminLeads = adminLeads.ToList();

            List<SelectListItem> options = new()
            {
                new SelectListItem { Value = "True", Text = "Yes" },
                new SelectListItem { Value = "False", Text = "No" }
            };
            options.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.options = options;

            List<SelectListItem> assessments = new()
            {
                new SelectListItem { Value = "Mussel", Text = "Mussel" },
                new SelectListItem { Value = "Crayfish", Text = "Crayfish" },
                new SelectListItem { Value = "Both", Text = "Both" },
                new SelectListItem { Value = "No", Text = "No" }
            };
            assessments.Insert(0, new SelectListItem { Value = "Select" });
            ViewBag.assessments = assessments;

            List<SelectListItem> reTypes = new()
            {
                new SelectListItem { Value = "Appendix A short form", Text = "Appendix A short form" },
                new SelectListItem { Value = "Review exempt", Text = "Review exempt" },
                new SelectListItem { Value = "SHPO", Text = "SHPO" },
                new SelectListItem { Value = "Programatic Agreement", Text = "Programatic Agreement" }
            };
            reTypes.Insert(0, new SelectListItem { Value = "Select", Text = "Select" });
            ViewBag.reTypes = reTypes;

            List<SelectListItem> counties = new()
            {
                new SelectListItem { Value = "Barbour", Text = "Barbour County" },
                new SelectListItem { Value = "Berkeley", Text = "Berkeley County" },
                new SelectListItem { Value = "Boone", Text = "Boone County" },
                new SelectListItem { Value = "Braxton", Text = "Braxton County" },
                new SelectListItem { Value = "Cabell", Text = "Cabell County" },
                new SelectListItem { Value = "Calhoun", Text = "Calhoun County" },
                new SelectListItem { Value = "Clay", Text = "Clay County" },
                new SelectListItem { Value = "Doddridge", Text = "Doddridge County" },
                new SelectListItem { Value = "Fayette", Text = "Fayette County" },
                new SelectListItem { Value = "Gilmer", Text = "Gilmer County" },
                new SelectListItem { Value = "Grant", Text = "Grant County" },
                new SelectListItem { Value = "Greenbrier", Text = "Greenbrier County" },
                new SelectListItem { Value = "Hampshire", Text = "Hampshire County" },
                new SelectListItem { Value = "Hancock", Text = "Hancock County" },
                new SelectListItem { Value = "Hardy", Text = "Hardy County" },
                new SelectListItem { Value = "Harrison", Text = "Harrison County" },
                new SelectListItem { Value = "Jackson", Text = "Jackson County" },
                new SelectListItem { Value = "Jefferson", Text = "Jefferson County" },
                new SelectListItem { Value = "Kanawha", Text = "Kanawha County" },
                new SelectListItem { Value = "Lewis", Text = "Lewis County" },
                new SelectListItem { Value = "Lincoln", Text = "Lincoln County" },
                new SelectListItem { Value = "Logan", Text = "Logan County" },
                new SelectListItem { Value = "Marion", Text = "Marion County" },
                new SelectListItem { Value = "Marshall", Text = "Marshall County" },
                new SelectListItem { Value = "Mason", Text = "Mason County" },
                new SelectListItem { Value = "McDowell", Text = "McDowell County" },
                new SelectListItem { Value = "Mercer", Text = "Mercer County" },
                new SelectListItem { Value = "Mineral", Text = "Mineral County" },
                new SelectListItem { Value = "Mingo", Text = "Mingo County" },
                new SelectListItem { Value = "Monongalia", Text = "Monongalia County" },
                new SelectListItem { Value = "Monroe", Text = "Monroe County" },
                new SelectListItem { Value = "Morgan", Text = "Morgan County" },
                new SelectListItem { Value = "Nicholas", Text = "Nicholas County" },
                new SelectListItem { Value = "Ohio", Text = "Ohio County" },
                new SelectListItem { Value = "Pendleton", Text = "Pendleton County" },
                new SelectListItem { Value = "Pleasants", Text = "Pleasants County" },
                new SelectListItem { Value = "Pocahontas", Text = "Pocahontas County" },
                new SelectListItem { Value = "Preston", Text = "Preston County" },
                new SelectListItem { Value = "Putnam", Text = "Putnam County" },
                new SelectListItem { Value = "Raleigh", Text = "Raleigh County" },
                new SelectListItem { Value = "Randolph", Text = "Randolph County" },
                new SelectListItem { Value = "Ritchie", Text = "Ritchie County" },
                new SelectListItem { Value = "Roane", Text = "Roane County" },
                new SelectListItem { Value = "Summers", Text = "Summers County" },
                new SelectListItem { Value = "Taylor", Text = "Taylor County" },
                new SelectListItem { Value = "Tucker", Text = "Tucker County" },
                new SelectListItem { Value = "Tyler", Text = "Tyler County" },
                new SelectListItem { Value = "Upshur", Text = "Upshur County" },
                new SelectListItem { Value = "Wayne", Text = "Wayne County" },
                new SelectListItem { Value = "Webster", Text = "Webster County" },
                new SelectListItem { Value = "Wetzel", Text = "Wetzel County" },
                new SelectListItem { Value = "Wirt", Text = "Wirt County" },
                new SelectListItem { Value = "Wood", Text = "Wood County" },
                new SelectListItem { Value = "Wyoming", Text = "Wyoming County" }
            };
            ViewBag.counties = counties;
        }

GET:得到:

// GET: TypeOnes/Create
        public IActionResult Create()
        {
            DropDowns();

            return View();
        }

POST:邮政:

 [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,State_Project_Number,Federal_Project_Number,Name,Route_Number,County,Work_Type,Coordinates,Project_Description,Federal_Aid,Minimal_Project_Verification,CE_Category,Amms,Activities_Agreement,Arch_RE,Hist_RE,Arch_RE_Date,Hist_RE_Date,Through_Lanes,Close_Road,ROW_Acquisition,Access_Control,Fifty_Year_Structure,Agency_Coordination,IPAC_Screening_Zone,Section_404_Permit,Ground_Disturbance,Waterway,Special_Use_Permit,Floodplain,Prepared_By,Approved_By,Adduser,Date_Added")] TypeOne typeOne, string Assessment, bool Bat)
        {
            DropDowns();
            if (ModelState.IsValid)
            {
                typeOne.Adduser = User.Identity.Name;
                typeOne.Date_Added = DateTime.Today;
                _context.Add(typeOne);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            return View(typeOne);
        }

And it started working.它开始工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 &quot;ArgumentNullException: Value cannot be null. (Parameter &#39;items&#39;)&quot; 使用视图中的下拉列表 asp.net mvc 创建新的数据库记录 - "ArgumentNullException: Value cannot be null. (Parameter 'items')" using a dropdown in the view asp.net mvc to create new database records ASP.NET CORE MVC | System.ArgumentNullException:'值不能是 null。 ' | Configuration.GetConnectionString - ASP.NET CORE MVC | System.ArgumentNullException : 'Value cannot be null. ' | Configuration.GetConnectionString Asp.Net Core 2.0 ArgumentNullException:值不能为null。 参数名称:connectionString - Asp.Net Core 2.0 ArgumentNullException: Value cannot be null. Parameter name: connectionString System.ArgumentNullException:值不能为 null。(参数“connectionString”)asp.net 核心 Docker-compose - System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString') asp.net Core Docker-compose ASP.NET MVC ArgumentNullException:值不能为 null。(参数“source”) - ASP.NET MVC ArgumentNullException: Value cannot be null. (Parameter 'source') ArgumentNullException:值不能为 null。 (参数“项目”) - ArgumentNullException: Value cannot be null. (Parameter 'items') ArgumentNullException:值不能为null。 参数名称:项目选择列表.net核心 - ArgumentNullException: Value cannot be null. Parameter name: items selectlist .net core 值不能为空。 参数名称:项目(在下拉列表中)ASP.NET MVC5 - Value cannot be null. Parameter name: items (in Dropdown List) ASP.NET MVC5 MVC3 asp.net错误:值不能为null。参数名称:下拉列表中的项目 - MVC3 asp.net error: Value cannot be null. Parameter name: items on dropdownlist 单元测试 ASP.NET 核心 3.1 MVC controller - 值不能是 null。 (参数“提供者”) - Unit testing ASP.NET Core 3.1 MVC controller - value cannot be null. (Parameter 'provider')
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM