我在創建頁面的 GET 方法中有這個串列:
List<string> users = (from c in _context.NR_Users select c.Name).ToList();
users.Insert(0, "Select");
ViewBag.users = users;
它顯示如下:
<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>
在模型中Prepared_By是一個字串。
在我點擊提交時的創建頁面上,我收到以下錯誤:
ArgumentNullException:值不能為空。(引數“專案”)
指向
<select asp-for="Prepared_By" name="Prepared_By" class="form-control" asp-items="@(new SelectList(ViewBag.users))"></select>
關于這個問題,我覺得有幾件事非常有趣。首先,在創建頁面的 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();
}
}
但是,當我嘗試在里面第二次列印它時,if(ModelState.IsValid)它不起作用。
還有什么有趣的是,我在不同的創建頁面中使用了這個完全相同的串列,它作業得很好:
<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);
}
在第二個示例中,我在 GET 方法中以完全相同的方式創建串列,但我從未遇到過這個問題。可能是什么問題呢?
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. 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.
EDIT 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 method:
[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("[email protected]");
}
//Send an email to bat lady if project needs a bat habitat assessement
if (Bat)
{
SendEmail("[email protected]");
}
return RedirectToAction(nameof(Index));
}
return View(typeOne);
}
uj5u.com熱心網友回復:
你能檢查一下 ASP.NET<form />元素嗎?它應該是這樣的:
<form asp-controller="MyController" asp-action="MyAction" method="post">
<!-- Your controls and etc -->
</form>
uj5u.com熱心網友回復:
我想到了。我將下拉串列抽??象為第三個方法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: TypeOnes/Create
public IActionResult Create()
{
DropDowns();
return View();
}
郵政:
[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);
}
它開始作業了。
uj5u.com熱心網友回復:
首先,在創建頁面的 POST 方法中,如果我列印 Prepared_By 的值,它總是列印正確的名稱
當然它會列印正確的值,因為您成功地將資料發布到后端。但是您需要知道下拉填充的資料不是由Prepared_By. 它通過使用asp-items="@(new SelectList(ViewBag.users))". 你沒有ViewBag.users在你的 post 方法中設定 ,這就是為什么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);
}
按照您的第二種方式,請務必除錯您的代碼并查看它何時運行。如果您ViewBag.users在填充下拉串列時不設定值,則不可能。如果有任何差異,請小心。
這是一個完整的簡單作業演示:
模型:
public class Test
{
public string Id{ get; set; }
public string Name { get; set; }
}
public class TestModel
{
public string Prepared_By { get; set; }
}
查看(創建.cshtml):
此外,您需要使用public SelectList(IEnumerable items, string dataValueField, string dataTextField);它將為下拉串列顯示正確的值和文本。
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>
控制器:
[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();
}
[HttpPost]
public IActionResult Create(TestModel 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350229.html
標籤:c# post asp.net-core-mvc asp.net-core-5.0 argumentnullexception
