C# FormCollection修改键
如何覆盖FormCollection中的键(我需要这样做,因为我有一个属性绑定到视图中的多个复选框)?我确实在回发邮件时尝试过:C# FormCollection修改键,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,如何覆盖FormCollection中的键(我需要这样做,因为我有一个属性绑定到视图中的多个复选框)?我确实在回发邮件时尝试过: formCollection["DecisionReasons"] = formCollection["DecisionReasons"].Replace(",false", "").Replace("false,", "").Replace(",","|"); …但是当我更新模型时,模型中只更新第一个值(在我的模型中,我有一个DecisionReason字符串)
formCollection["DecisionReasons"] = formCollection["DecisionReasons"].Replace(",false", "").Replace("false,", "").Replace(",","|");
…但是当我更新模型时,模型中只更新第一个值(在我的模型中,我有一个DecisionReason字符串)
我是否需要ModelBinder(我如何才能做到这一点?)或者是否有其他方法可以做到这一点?我在上面发表了评论,要求提供更多详细信息,但我得到的印象是,您正在使用复选框来表示标志枚举中的各个值 默认模型绑定器不以这种方式处理映射标志,但我发现了一个自定义模型绑定器,它以这种方式处理映射标志 编辑: 好的,我从您的更新中看到(如果您将其添加到问题中,而不是将其作为答案发布,这会更好),您的模型有一个逗号分隔的字符串属性,包含每个选定的DecisionReasions 我建议你考虑使用VIEW模型。ViewModel是您的模型的抽象,它是根据您在视图中显示它的方式定制的 可以从模型类派生ViewModel,以减少工作量。考虑这个(未经测试)代码: 使用MyViewModel作为视图的模型,并使用DecisionReasonValue呈现复选框,而不是DecisionReasons。ASP.NET MVC将从您的复选框中填充DecisionReasonValue,但您可以通过Overrided DecisionReasons属性将其作为逗号删除字符串进行访问。视图的一部分
<div style="width:300px;height:250px;overflow:auto;">
@foreach (var a in (IEnumerable<SelectListItem>)ViewBag.AllDecisionReasons)
{
@Html.CheckBox("DecisionReasons", a.Selected, new { value = a.Value })
<label>@a.Text</label><br />
}
@Html.ValidationMessage("DecisionReasons", (string)Model.DecisionReasons)
@foreach(在(IEnumerable)ViewBag.AllDecisionReasons中的变量a)
{
@复选框(“DecisionReasons”,a.选中,新建{value=a.value})
@a、 文本
}
@ValidationMessage(“DecisionReasons”,(字符串)Model.DecisionReasons)
如果我在视图中选中多个复选框,则我的模型属性(字符串为)将仅更新为一个值示例(如果在视图中选中两个复选框,则我的模型将更新为第一个值,因此我需要该模型属性具有值“valu1、valu2”等。)
对不起,我的英语不好。你能再解释一下你的复选框问题吗?发布视图和模型代码。很可能有更好的方法来解决你的问题。
<div style="width:300px;height:250px;overflow:auto;">
@foreach (var a in (IEnumerable<SelectListItem>)ViewBag.AllDecisionReasons)
{
@Html.CheckBox("DecisionReasons", a.Selected, new { value = a.Value })
<label>@a.Text</label><br />
}
@Html.ValidationMessage("DecisionReasons", (string)Model.DecisionReasons)