nik*_*i b 9 c# checkbox asp.net-core-mvc tag-helpers
抱歉,我的大多数搜索都会将我带到旧的MVC代码.任何帮助将不胜感激.
在带有标记帮助器的MVC 6中,如何编写一组复选框:
?
我能够正确显示带有标签的复选框,但我不知道如何通过模型将选中的值传递回控制器.现在,IsOptionSelected值返回false.
我还能够为标签工作制作html帮助器,但不能为标签帮助器制作.我可能也编码这些都错了所以任何提示都会有所帮助!
这是我到目前为止所拥有的:
显示:
实体:
public class PhoneOption
{
public bool IsOptionSelected { get; set; } = false;
public int OptionId { get; set; }
public string OptionName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
模型:
[Display(Name = "Phone Options")]
public IEnumerable<PhoneOption> PhoneOptions { get; set; }
. . . .
PhoneOptions = repository.GetPhoneOptions();
Run Code Online (Sandbox Code Playgroud)
库:
public IEnumerable<PhoneOption> GetPhoneOptions()
{
IEnumerable<PhoneOption> options = new[]
{
new PhoneOption { OptionId = 1, OptionName = "Phone Case", IsOptionSelected = false },
new PhoneOption { OptionId = 2, OptionName = "Screen Protector", IsOptionSelected = false },
new PhoneOption { OptionId = 3, OptionName = "Car Charger", IsOptionSelected = false },
new PhoneOption { OptionId = 4, OptionName = "Extra Cable", IsOptionSelected = false }
};
return options;
}
Run Code Online (Sandbox Code Playgroud)
视图:
<div class="form-group">
<label class="control-label">Phone Options</label>
<div>
@foreach (var option in Model.PhoneOptions)
{
<div>
@{ string cbId = "PhoneOption_" + @option.OptionId; }
<input asp-for=@option.IsOptionSelected type="checkbox" value=@option.IsOptionSelected id=@cbId name=@cbId />
@Html.Label(@cbId.ToString(), @option.OptionName)
@*This is causing invalid operation exception*@
@*<label asp-for=@cbId.ToString()>@option.OptionName</label>*@
<span asp-validation-for=@cbId class="text-danger" role="alert"></span>
</div>
}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
提前致谢!
这最终是我做的工作.我不确定这是否是最好的方法.我不得不仍然使用html帮助程序,因为标记帮助程序不起作用.
模型:
public List<PhoneOption> PhoneOptions { get; set; }
. . .
PhoneOptions = repository.GetPhoneOptions().ToList();
Run Code Online (Sandbox Code Playgroud)
查看:
@if (@Model.PhoneOptions != null && @Model.PhoneOptions.Count() > 0)
{
for (int i = 0; i < @Model.PhoneOptions.Count(); i++)
{
<div>
<input asp-for="@Model.PhoneOptions[i].IsOptionSelected" type="checkbox" />
<label asp-for="@Model.PhoneOptions[i].IsOptionSelected">@Model.PhoneOptions[i].OptionName</label>
@*If these are not included, all OptionIds become 0 and all OptionName becomes null*@
@Html.HiddenFor(x => @Model.PhoneOptions[i].OptionId)
@Html.HiddenFor(y => @Model.PhoneOptions[i].OptionName)
</div>
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这有助于其他拥有相同复选框列表问题的人.
更新: 我已经更新了html帮助器以标记上面的助手.
| 归档时间: |
|
| 查看次数: |
9846 次 |
| 最近记录: |