Можно ли динамически создать asp-for на основе класса enum?
@foreach (MyClass.MyOption item in Enum.GetValues(typeof(MyClass.MyOption)))
{
var checkboxName = $"MyClass.CheckBox{item}";
<label asp-for = "@checkboxName" class = "control-label">
<input type = "checkbox" asp-for = "@checkboxName" class = "radio-inline" value = "true" name = "@checkboxName" />
</label><br/>
}
С этими определениями MyRequest:
public static class MyClass
{
public enum MyOption : byte
{
First = 0,
Second = 2,
Third = 4
}
public class MyRequest
{
public bool CheckBoxFirst { get; set; }
public bool CheckBoxSecond { get; set; }
public bool CheckBoxThird { get; set; }
}
}
Когда я это делаю, я сталкиваюсь с ошибкой:
InvalidOperationException: неожиданное значение результата выражения «MyClass.CheckBoxFirst» для asp-for. «MyClass.CheckBoxFirst» не может быть проанализирован как «System.Boolean».
Предпочтительно, чтобы я даже динамически создавал логические функции в MyRequest (CheckBoxFirst, CheckBoxSecond и т. д.).
Пробовал с приведенным выше кодом, но только asp-for в типе ввода, похоже, не работает из-за ошибки синтаксического анализа.
Спасибо за вашу реакцию @QingGuo. «@CheckBoxName» — это функция, которая возвращает/устанавливает логическое значение, верно?
Это решит ошибку: for asp-for. «MyClass.CheckBoxFirst» не может быть проанализирован как «System.Boolean». Но вы получите имя и id =checkboxName, а не тот результат, который хотите.
Итак, вы предлагаете просто сделать: '''<input type = "checkbox" class = "radio-inline" value = "true" name = "@checkboxName" />''', верно?
Да, вы можете использовать name и id вместо asp-for.
Извините за мое непонимание. Но как он будет привязываться к логическим значениям MyRequest?





как он будет привязываться к логическим значениям MyRequest?
name = "@checkboxName" 2. измените checkboxName на $"MyRequest.CheckBox{item}"
Попробуйте следующий код:
<form asp-action = "Index" method = "post">
@foreach (MyClass.MyOption item in Enum.GetValues(typeof(MyClass.MyOption)))
{
var checkboxName = $"MyRequest.CheckBox{item}";
<label name = "@checkboxName" id = "@checkboxName" class = "control-label">
</label><br/>
<input type = "checkbox" class = "radio-inline" value = "true" name = "@checkboxName" id = "@checkboxName"/>
}
<input type = "submit" value = "create"/>
</form>
Динамический asp для контроллера:
public class DynamicaspforController : Controller
{
public IActionResult Index()
{ return View(); }
[HttpPost]
public IActionResult Index( MyRequest myRequest)
{
return View();
}
}
результат:
asp-for всегда ожидает логический параметр, если тип ввода — флажок, или строковый параметр, который может быть проанализирован как логический. Почему бы не использовать только
name = "@checkboxName"? Это работает нормально.