gpt4 book ai didi

asp.net-mvc - 维护ASP.NET MVC中复选框动态列表的状态

转载 作者:行者123 更新时间:2023-12-03 18:40:26 28 4
gpt4 key购买 nike

我有一个名为“PropertyFeature”的类,它仅包含PropertyFeatureID和Description。这是通过LINQ to SQL创建的映射到SQL Server数据库表的适当模型。一个示例实例/行将是:

PropertyFeatureID: 2
Description: "Swimming Pool"

行数(PropertyFeatures)当然可以增加和缩小,因此我想动态呈现复选框列表,以便用户可以选择其中的任何一个。
我可以通过以下方式轻松轻松地动态呈现复选框:
<%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>
<%}%>

我为每个复选框指定ID,并呈现匹配的标签,以便用户可以直观地单击标签并切换复选框-效果很好。

我将CheckBox的“名称”设置为“功能”,以便所有复选框均以相同的名称呈现,并且在发布表单时,MVC Model Binder将它们堆叠到一个名为“功能”的单个集合中。这很好。

提交表单后,我将使用检查后的值并将其存储,因此我需要实际的整数值,因此我知道选择了哪个PropertyFeature,而不仅仅是一堆 bool 值和字段名。因此,理想情况下,我希望将其作为易于使用的数组或集合。

单击按钮后,我能够从Controller方法中检索选定的值,因为我已将参数指定为int []功能。

但是的问题是它不保持状态。也就是说,当我单击“提交”按钮并且页面重新加载(再次显示表单)时,我希望所有动态复选框保持(或不保留)其选中状态。我使用 Html.DropDownListHtml.TextBox创建的所有其他字段都成功地保持了它们的状态,并且在同一页面上以相同的形式完全没有问题。

我已经花了数小时阅读有关类似问题的所有其他主题和文章,并且有很多关于使用 ICollectionIDictionary捆绑事物并为每个项目包括一个 bool 值以便保持复选框状态的讨论。但是我不是100%掌握如何在我自己的个人示例中使用它。我想使解决方案非常简单,而不必为了维护我的复选框状态而编写新类的页面。

什么是最干净正确的方法?

最佳答案

我在尝试了各种不同的方法之后才开始工作。

在 View 中:

<%string[] PostFeatures = Request.Form.GetValues("Features");%>
<% foreach (var Feature in (ViewData["AllPropertyFeatures"] as
IEnumerable<MySolution.Models.PropertyFeature>))
{ %>
<input type="checkbox" name="Features"
id="Feature<%=Feature.PropertyFeatureID.ToString()%>"
value="<%=Feature.PropertyFeatureID%>"
<%if(PostFeatures!=null)
{
if(PostFeatures.Contains(Feature.PropertyFeatureID.ToString()))
{
Response.Write("checked=\"checked\"");
}
}
%> />
<label for="Feature<%=Feature.PropertyFeatureID%>">
<%=Feature.Description%></label> <%
} %>

在接收 Controller 方法中:
public ActionResult SearchResults(int[] Features)

此方法具有许多优点:
  • 允许单击标签来切换相应的复选框(可用性)。
  • 允许Controller方法接收一个整洁的int数组,该数组仅包含已选择的int-而不是未选中或包含false/null/blank/0等的其他所有项目。
  • 在重新加载包含表单的页面时保留复选框的选中状态,即保留用户的选择。
  • 没有从默认的ASP.Net MVC Html.CheckBox帮助程序创建的随机/杂散类型=隐藏的输入字段-我知道这样做是有充分理由的,但是在这种情况下,我不需要它们,因为我只想知道关于选择了哪些ID以及将这些ID放在一个整洁的int []中。
  • 不需要大量额外的服务器端classes肿类,助手和其他使事情变得如此简单的麻烦事。

  • 对于需要最干净/无肿胀解决方案的动态复选框列表的人,我建议使用这种方法,在此您需要ID并且只想开始做生意!

    关于asp.net-mvc - 维护ASP.NET MVC中复选框动态列表的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291501/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com