我有一个名为"PropertyFeature"的类,它只包含PropertyFeatureID和Description.它是通过映射到SQL Server数据库表的LINQ to SQL创建的正确模型.示例实例/行将是:
PropertyFeatureID: 2
Description: "Swimming Pool"
Run Code Online (Sandbox Code Playgroud)
行数(PropertyFeatures)当然可以增长和缩小,因此我想动态呈现一个复选框列表,以便用户可以选择其中任何一个.我可以很容易地动态渲染Checkbox,例如:
<%foreach (var Feature in (ViewData["Features"] as IEnumerable<MySolution.Models.PropertyFeature>)) { %>
<%=Html.CheckBox("Features", new { @id = Feature.PropertyFeatureID, @value = Feature.PropertyFeatureID })%><label for="Feature<%=Feature.PropertyFeatureID%>"><%=Feature.Description%></label>
<%}%>
Run Code Online (Sandbox Code Playgroud)
我为每个复选框指定ID并呈现匹配的标签,以便用户可以直观地单击标签并切换复选框 - 这很有效.
我将CheckBox的"名称"设置为"Features",因此所有复选框都以相同的名称呈现,并且MVC Model Binder在发布表单时将它们堆叠到一个名为"Features"的集合中.这很好用.
提交表单后,我使用选中的值并存储它们,因此我需要实际的整数值,因此我知道选择了哪个PropertyFeature,而不仅仅是一堆布尔值和字段名称.理想情况下,我希望它可以作为一个易于使用的数组或集合.
单击按钮时,我可以从Controller方法中检索所选值,因为我已将参数指定为int [] Features.
但问题是它没有维持状态.也就是说,当我单击提交按钮并重新加载页面(再次显示该表单)时,我希望所有动态复选框保持其已检查状态(或不保持).所有这一切我已经创造了其他领域Html.DropDownList,并Html.TextBox都保持自己的状态没有任何成功都在同一页上以相同的形式问题.
我花了几个小时阅读关于类似问题的所有其他线程和文章,并且有很多关于使用ICollection和IDictionary捆绑的内容,并为每个项目包含一个布尔值,以便它可以保持复选框状态.但我并没有100%掌握如何在我个人的例子中使用它.我想保持解决方案非常简单,不必为了保持我的复选框状态而编写新类的页面.
这样做最干净,最恰当的方法是什么?
抱歉,我的大多数搜索都会将我带到旧的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 …Run Code Online (Sandbox Code Playgroud) 我有一个表单,其中包含一大堆复选框和一些其他类型的控件.我需要检索每个选中复选框的名称.
做这个的最好方式是什么?我可以使用linq查询吗?
所以在伪代码中,我希望做这样的事情:
var names = formCollection
.Where(c => c is Checkbox && c.Checked)
.Select(c => c.Name);
Run Code Online (Sandbox Code Playgroud)
更新似乎MVC提交复选框的方式与普通表单的行为方式不同,因为隐藏字段也会呈现.我在这里找到了详细信息:如何处理ASP.NET MVC表单中的复选框?
Anywho,我已经得到了该线程的帮助以及下面BuildStarted的答案.以下代码完成了这一操作.
var additionalItems = form.AllKeys
.Where(k => form[k].Contains("true") && k.StartsWith("addItem"))
.Select(k => k.Substring(7));
Run Code Online (Sandbox Code Playgroud) 好的,我有一个基于角色的权限系统,并希望管理员能够编辑每个角色的权限.要做到这一点,我需要加载大量的复选框,但是我很难从View中获取返回数据
请注意:我环顾四周,我发现了类似的问题,但截至目前尚无法找到解决方案.
<%
Html.BeginForm();
string lastGroup = "";
foreach (var CurPermission in Model)
{
%>
<%=Html.CheckBox("Permissions", CurPermission.Checked, new { ID = CurPermission.PermissionId}) + " " + CurPermission.PermissionValue%>
<br />
<%
}
%>
<input type="submit" value="Submit" />
<%
Html.EndForm();
%>
Run Code Online (Sandbox Code Playgroud)
和控制器,
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditPermissions(String[] Permissions)
{
foreach (var CurPermission in Permissions)
{
Debug.WriteLine(CurPermission);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
显然,我需要知道哪些盒子没有被检查,以及那些盒子.但是在返回值中因为整体("真,假"),我无法找出哪个值与哪个复选框相关.
任何关于修复或预选的替代方法的建议都会受到关注.
我的MVC应用程序中有两个复选框,它们都是布尔/位字段."NotifyEmail"和"NotifySMS".
每当我回发到服务器并发生错误时,虽然我设置了尝试的值,但是复选框的状态已经消失.
我正在努力解决ASP.NET MVC中缺少CheckBoxList的问题.我已经达到了可以渲染Enum值列表的程度,但我仍然坚持如何根据我的模型设置checked属性 - 在这种情况下,是一个具有IList of Role实体的User实体.角色id对应于枚举值.
此示例使用Spark View Engine语法,但它在功能上与标准ASP.NET MVC视图引擎相同("$("与"<%="或"<%"相同)
<for each="var r in Enum.GetValues(typeof(UserRole))">
<label><input type="checkbox" name="Roles" value="${(int)r}" checked="[How-The-Heck-To-I-Get-This?]" />${r}</label>
</for>
Run Code Online (Sandbox Code Playgroud) 我有一个页面,其中列出了名为TimeRange1,TimeRange2 .... TimeRange7的复选框,我在for循环中生成它们,如下所示:
<% for (int currentDay = 1; currentDay <= 7; currentDay++)
......<%= Html.CheckBox("TimeRange" + currentDay.ToString(), false)%>
Run Code Online (Sandbox Code Playgroud)
工作正常,直到我发布表单,然后我得到"字符串未被识别为有效的布尔字符串."
显然问题是我连接了复选框的名称.
有一些巧妙的方法来解决这个问题吗?我需要让他们命名为1-7.这就像一个大的时间表,您可以选择哪些时间可用.
我有一个包含许多复选框的视图.我希望能够将复选框的值传递给控制器,然后输出已经勾选的OfficeNames列表.我不知道如何将多个复选框的值传递回控制器,或者如何根据已勾选的框输出OfficeNames
视图:
<p>
@using (Html.BeginForm())
{
<p>
Start Date: @Html.TextBox("StartDate") <br />
<br />
End Date: @Html.TextBox("EndDate") <br />
<br />
<input type="submit" value="Filter" />
</p>
}
<p>
@foreach (var item in Model.BettingOffices)
{
<label>@Html.DisplayFor(modelItem => item.OfficeName)</label>
<input type="checkbox" name="selectedShops" value="@item.OfficeName">
}
</p>
Run Code Online (Sandbox Code Playgroud)
控制器:
public class DailyReportController : Controller
{
private RiskEntities _db = new RiskEntities();
// GET: /DailyReport/
public ActionResult Index(DateTime? startDate, DateTime? endDate)
{
if (startDate == null || endDate == null)
{
var dailyReportModelBlank = new DailyReportModel(); …Run Code Online (Sandbox Code Playgroud) 我工作的ASP.NET MVC的Web应用程序,我需要提交List<ProdColor>到Controller用checkbox秒.这是我的代码
模型
public partial class ProdColor
{
public int ProdColor_ID { get; set; }
public Nullable<int> P_ID { get; set; }
public Nullable<int> Color_ID { get; set; }
public virtual ProdctModelView ProdctModelView { get; set; }
}
public class ProdctModelView
{
public ProdctModelView()
{
this.ProductColors = new HashSet<ProdColor>();
}
public int P_ID { get; set; }
public string P_name { get; set; }
public virtual ICollection<ProdColor> ProductColors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调节器 …
asp.net-mvc ×8
checkbox ×6
c# ×3
binding ×1
controls ×1
razor ×1
state ×1
tag-helpers ×1
viewmodel ×1
webforms ×1