C# 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中的键(我需要这样做,因为我有一个属性绑定到视图中的多个复选框)?我确实在回发邮件时尝试过:

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)