【发布时间】:2016-08-19 17:22:41
【问题描述】:
抱歉,我的大部分搜索都将我带到旧的 MVC 代码。任何帮助将不胜感激。
在带有标签助手的 MVC 6 中,如何编写一组复选框:
- 对标签使用标签助手,因此单击它会切换选中的值
- 将选中的值保存(绑定?)到 IsOptionSelected 属性
- 单击提交后将这些检查值传回控制器
?
我能够正确显示带有标签的复选框,但我不知道如何通过模型将选中的值传递回控制器。现在,IsOptionSelected 值返回为 false。
我还能够使标签的 html 助手工作,但不能用于标签助手。我可能也将这些代码都写错了,所以任何提示都会有所帮助!
这是我目前所拥有的:
显示:
实体:
public class PhoneOption
{
public bool IsOptionSelected { get; set; } = false;
public int OptionId { get; set; }
public string OptionName { get; set; }
}
型号:
[Display(Name = "Phone Options")]
public IEnumerable<PhoneOption> PhoneOptions { get; set; }
. . . .
PhoneOptions = repository.GetPhoneOptions();
存储库:
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;
}
查看:
<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>
提前致谢!
【问题讨论】:
-
我猜 asp-for 的使用方式有误。将输入中的 asp-for=@option.IsOptionSelected 更改为 asp-for="IsOptionSelected",这将确保它绑定到 PhoneOption 中的正确属性。标签 asp-for=@cbId.ToString() 中的相同内容是错误的。请查看此处的教程以获取标签助手。davepaquette.com/archive/2015/05/18/mvc6-select-tag-helper.aspx
-
感谢您的建议,但更改为 asp-for="IsOptionSelected" 会引发语法错误,因为它不在主模型中。它是每次迭代的 Model.PhoneOption 选项的一部分。 asp-for=option.IsOptionSelected 也不起作用。是的,我之前已经阅读过该教程,但它并没有像我想要做的那样涵盖复选框列表。
-
啊,我明白了。检查这个是否有帮助stackoverflow.com/questions/15375800/…
-
@AmeteGirl。为有用的链接 +1。
标签: c# checkbox asp.net-core-mvc tag-helpers