У меня есть следующие переключатели на моей странице Razor:
<div class = "form-group row">
<div class = "col">
<input asp-for = "CodingLookup.CodingOption" type = "radio" name = "tele" value = "tele0" />
<label for = "tele0">Not coding.</label>
</div>
</div>
<div class = "form-group row">
<div class = "col">
<input asp-for = "@Model.CodingLookup.CodingChangesNotRequired" type = "radio" name = "tele" value = "tele1" />
<label for = "tele1">I have reviewed* my 2021/2022 coding forms and will not be requesting any changes for 2022/2023.</label>
</div>
</div>
<div class = "form-group row">
<div class = "col">
<input asp-for = "@Model.CodingLookup.CodingChangesRequired" type = "radio" name = "tele" value = "tele2" />
<label for = "tele2">I have reviewed* my 2021/2022 coding forms and changes are required. I will submit revised 2022/2023 coding forms </label>
</div>
</div>
<div class = "form-group row">
<div class = "col">
<input asp-for = "@Model.CodingLookup.NotCompletedCodingForm" type = "radio" name = "tele" value = "tele3" />
<label for = "tele3">I have not previously completed coding forms but will be coding in 2022/2023. I will submit new coding forms .</label>
</div>
У меня есть следующие классы моделей:
public partial class EmployeeInfo
{
public int EmployeeInfoId { get; set; }
public virtual CodingLookup? CodingLookup { get; set; }
}
public partial class CodingLookup
{
public int CodingLookupId { get; set; }
public bool CodingOption { get; set; }
public bool CodingChangesRequired { get; set; }
public bool CodingChangesNotRequired { get; set; }
public bool NotCompletedCodingForm { get; set; }
public virtual List<EmployeeInfo> EmployeeInfos { get; } = new List<EmployeeInfo>();
}
При необходимости я могу изменить указанный выше класс CodingLookup. Я в основном помещаю все параметры в класс модели. Когда я выбираю любой вариант и нажимаю отправить кнопка, значение codingLookup равно null в HTTPPost. Это первый раз, когда я использую RadioButtons.
ОБНОВЛЯТЬ:
Я также попытался изменить класс модели следующим образом:
public partial class EmployeeInfo
{
public int EmployeeInfoId { get; set; }
public virtual CodingLookup? CodingLookup { get; set; }
}
public partial class CodingLookup
{
public int CodingLookupId { get; set; }
public string CodingOption { get; set; }
public string[] CodingOptions = new[] { "Coding Test1", "Coding Test2", "Coding Test3", "Coding Test4"};}
}
public virtual List<EmployeeInfo> EmployeeInfos { get; } = new List<EmployeeInfo>();
}
Это мой код Razor:
@model AckPackage.Models.EmployeeInfo
<div class = "form-group row">
<div class = "col">
@foreach (var x in Model.CodingLookup.CodingOptions)
{
<input type = "radio" asp-for = "CodingLookup.CodingOption" value = "@Model.CodingLookup.CodingOption" />
@Model.CodingLookup.CodingOption
<br />
}
</div>
</div>
Код выше тоже не работает. Я просто хочу отобразить все имена с переключателем на моей странице, а затем получить значение этого переключателя в HTTPPost. ниже мой контроллер:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(EmployeeInfo employeeInfo)
{
}
Ошибка:
Как только я запускаю код, я получаю эту ошибку:
Любая помощь будет высоко оценена.
Да, это. Это в верхней части моего класса контроллера: @model AckPackage.Models.EmployeeInfo
Вам нужно изменить свой вид, как показано ниже:
<div class = "form-group row">
<div class = "col">
@foreach (var x in Model.CodingLookup.CodingOptions)
{
<input type = "radio" asp-for = "CodingLookup.CodingOption" value = "@x" />
@x
<br />
}
</div>
</div>
Целая рабочая демонстрация, которой вы можете следовать:
Модель
public partial class EmployeeInfo
{
public int EmployeeInfoId { get; set; }
public virtual CodingLookup? CodingLookup { get; set; }
}
public partial class CodingLookup
{
public int CodingLookupId { get; set; }
public string CodingOption { get; set; }
public string[] CodingOptions = new[] { "Coding Test1", "Coding Test2", "Coding Test3", "Coding Test4" };
public virtual List<EmployeeInfo> EmployeeInfos { get; } = new List<EmployeeInfo>();
}
Представление (представления/главная/создать.cshtml)
@model EmployeeInfo
<form asp-action = "Create" method = "post">
<div class = "form-group row">
<div class = "col">
@foreach (var x in Model.CodingLookup.CodingOptions)
{
<input type = "radio" asp-for = "CodingLookup.CodingOption" value = "@x" />
@x
<br />
}
</div>
</div>
<input type = "submit" value = "post" />
</form>
Контроллер
public class HomeController : Controller
{
[HttpGet]
public async Task<IActionResult> Create()
{
return View(new EmployeeInfo() { CodingLookup=new CodingLookup()});
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(EmployeeInfo employeeInfo)
{
//do your stuff....
return View();
}
}
Могу ли я использовать существующую модель для передачи значения Tele. Это поверх моего класса контроллера: @model AckPackage.Models.EmployeeInfo
Я опубликовал обновленный класс модели.
Привет @Rena, как только я запускаю код, я получаю ошибку исключения NULL. Я вставил ошибку в свой исходный пост под ошибкой.
Привет @rimi, пожалуйста, посмотрите мое действие HttpGet Create для рендеринга представления, вы передали модель в свой код, как я?
Привет @Rena, Когда я это сделаю, верните View(new EmployeeInfo() { CodingLookup=new CodingLookup()}); Я не получаю ошибку, но я также не получаю никакой информации о EmployeeInfo. Я передаю много информации о сотруднике, такой как имя, фамилия и другие вещи, связанные с сотрудником. Вся эта информация становится пустой.
В своем Create я передаю employee = await _employeeService.GetEmployeeByEmployeeNumber(up.EmployeeId);
Привет, @rimi, как твой сервис? Ошибка, вызванная тем, что CodingLookup имеет значение null, вам нужно проверить это.
Я обновляю свой исходный пост и добавляю свой метод Get. В моем методе get много кода.
Привет @rimi, тебе нужно рассказать, что такое сервис GetEmployeeByEmployeeNumber в исходном посте.
Или вы можете попробовать изменить свойство на :public virtual CodingLookup CodingLookup { get; set; }= new CodingLookup(); в EmployeeInfo.
Общедоступный виртуальный CodingLookup CodingLookup { get; набор; }= новый кодинглукуп(); работал. Спасибо за вашу помощь!!
Вы помещаете сюда оба пространства имен (EmployeeInfo и CodingLookup)? и так ли написана страница Razor? (@model test.Models.EmployeeInfo)