После того, как я понял, что я не могу действительно сохранять состояния флажков с помощью javascript (с разных машин), я пытался заставить его работать на стороне сервера.
Что я делаю с этим перечислением:
namespace namespace
{
[Flags]
public enum prop: uint
{
/// <summary>
///
/// </summary>
a= 1,
/// <summary>
///
/// </summary>
b= 2,
/// <summary>
///
/// </summary>
c= 4
}
}
И объявлено так в модели:
public int prop
{
get { return prop; }
set { prop= value; }
}
Заставьте его работать как флажки, поэтому, если вы нажмете первый и последний, значение будет отправлено как 5 и так далее.
это мой контроллер:
public IActionResult action(int id)
{
var model = something
model.class.class.Select(x => x.prop);
return View(model);
}
На мой взгляд, я напечатал как:
foreach(var a in Model)
@Html.EditorFor(x = > a.prop)
Это шаблон редактора:
@model Enum
@{
var modelType = @Model.GetType();
}
@foreach (var name in Enum.GetNames(modelType))
{
var value = Convert.ToInt32(Enum.Parse(modelType, name));
if (value != 0)
{
var isChecked = ((Convert.ToInt32(Model) & value) == value) ? "checked" : null;
<input type="checkbox" name="@ViewData.TemplateInfo.HtmlFieldPrefix" value="@name" class="prop" checked="@isChecked" data-valueCheck="@value" />
@name
<br />
}
}
Итак, как я могу сделать, если я отправил 7 на сервер, распечатать чекB. выбран? . Я уже сделал часть js, поэтому он всегда сохраняет правильное значение в объекте js, который я отправляю на сервер, примерно так:
[
{
"id": 00000000,
"prop": 1,
nestedobjectetc...
...
}
]
Поэтому, если я получаю "prop": 1
, то по крайней мере один флажок должен отображаться как выбранный.
Итак, я сложен, ищу и пробую разные вещи, но не знаю, как работать с перечислениями... некоторые рекомендации?? Если это недостаточно ясно, пожалуйста, дайте мне знать, большое спасибо, qiqke
1 ответ
Вы можете написать свою собственную привязку модели, чтобы передать sum
выбранных значений флажка вашему действию при отправке формы. См. Демонстрацию ниже:
1.Модель.CS:
public class MyModel
{
private int appliesOn;
[BindProperty(BinderType = typeof(EnumToIntModelBinder))]
public int AppliesOn
{
get { return appliesOn; }
set { appliesOn = value; }
}
}
2.EnumToIntModelBinder.cs
public class EnumToIntModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var value = valueProviderResult.Values;
int sum = 0;
foreach (var item in value)
{
sum += int.Parse(item);
}
bindingContext.Result = ModelBindingResult.Success(sum);
return Task.CompletedTask;
}
}
3. Вид бритвы:
<form asp-action="SumEnumCheckBox" method="post">
<div class="checkboxContainer">
<label class="checkbox">
<input type="checkbox" name="myModel.AppliesOn" class="appliesOnField" id="" value="1" />@namespace.AppliesOn.Physical
</label>
<label class="checkbox">
<input type="checkbox" name="myModel.AppliesOn" class="appliesOnField" id="" value="2" />@namespace.AppliesOn.Sendings
</label>
<label class="checkbox">
<input type="checkbox" name="myModel.AppliesOn" class="appliesOnField" id="" value="4" />@namespace.AppliesOn.Billing
</label>
<div class="col-md-12">
<button class="btn btn-primary" type="submit">Send</button>
</div>
</div>
</form>
4.Действие:
[HttpPost]
public async Task<IActionResult> SumEnumCheckBox(MyModel myModel)
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
$(this)[0].checked === true ? Number((result += valorAppliesOn) / 1) : (result -= this.value);
и отправить как объект JSON. У меня проблема в том, что я не могу вспомнить, была ли нажата одна проверка, а затем, когда она обновится, она будет отмечена (в соответствии со значением). Что вы думаете?var isChecked = ((Convert.ToInt32(Model) & value) == value) ? "checked" : null;
и они вinput
имеют атрибутchecked
, например:checked="@isChecked