c# - .net 核心复选框模型绑定视图
问题描述
我是编程新手,非常感谢您的英语帮助。我的 ms sql 数据库中有一个字段,比如“city”,它的数据类型是“string”。我的 asp.net 核心 mvc 中有“悉尼”、“伦敦”、“柏林”、“德里”的复选框。现在,当用户选择“悉尼”和“伦敦”时,我希望将数据(在“城市”下)存储为“悉尼,伦敦”。基本上我想序列化(逗号分隔)视图数据并将其存储在字段下并稍后对其进行反序列化以将其显示在视图中。我来了,在视图中的“城市”下存储一个值并检索它,然后在我的视图中显示回来。不知道如何做多个值。我不确定该怎么做/怎么做。任何指导将不胜感激。
下面是我如何存储我的单个值的视图代码,
<div class="form-group my-2">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Sydney"> Sydney
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="London"> London
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Berlin"> Berlin
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Delhi"> Delhi
</label>
</div>
</div>
我的模型文件具有如下声明的字段,
public string city {get; set;}
我的控制器收到这样的物品,
public async Task<IActionResult> Edit(string id, [Bind("city")] RNote rNote)
{
return View(rNote);
}
如果我必须阅读一些主题才能理解您的答案,请在您的答案中列出。谢谢你。
解决方案
要将多个值绑定到字符串类型的属性,您可以自定义模型绑定,如下所示:
public class CustomModelBinder: IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
throw new ArgumentNullException(nameof(bindingContext));
var values = bindingContext.ValueProvider.GetValue("city");
if (values.Length == 0)
return Task.CompletedTask;
var result = new RNote
{
city = values.ToString()
};
bindingContext.Result = ModelBindingResult.Success(result);
return Task.CompletedTask;
}
}
控制器:
public async Task<IActionResult> Edit(int id, [ModelBinder(BinderType = typeof(CustomModelBinder))] RNote rNote)
看法:
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group my-2">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Sydney"> Sydney
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="London"> London
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Berlin"> Berlin
</label>
<label class="btn btn-outline-primary">
<input type="checkbox" name="city" autocomplete="off" value="Delhi"> Delhi
</label>
</div>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-primary" />
</div>
</form>
参考:
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding?view=aspnetcore-3.1
推荐阅读
- c - 当我编译、运行并输入变量“c”的整数值时程序崩溃
- android - 尝试在 C++Builder 中使用 boost 时出错“一些未定义的必需宏”
- xamarin.forms - Xamarin Forms Shell - iOS 在底部 TabBar 下扩展视图
- javascript - Discord.js 仅更改一个语音通道名称
- import - tflite_runtime interpreter.py" "" 已注册!在 Windows 10 上
- python - 在python中使用'不等于'和if语句
- blockchain - 将需要在同一交易中恢复在单独合约中所做的存储更改 - Solidity
- flutter - 我的 API ROUTE 的 Flutter / Dart http 请求获取方法未在正文中返回响应
- azure - 使用自定义连接器的逻辑应用程序:逻辑应用程序触发器中的下拉菜单中显示的先前选择的值
- vagrant - Github 操作作业将目录结构递归为工作目录?