ListBox不会在帖子之间取消选择

时间:2014-09-02 14:09:03

标签: c# asp.net-mvc-4 razor

我在视图中有以下代码:

<div class="row form-group">
    @Html.LabelFor(x => x.GroupCriteria.Name, Translation.Name, new { @class = "col-sm-4 control-label" })
    <div class="col-sm-4">
        @Html.ListBoxFor(m => m.GroupCriteria.Name, Model.NameList, new { @class = "multi-select-custom" })
    </div>
</div>

...

<button type="submit" name="removeCriterion" value="Name">X</button>Name: @(string.Join(",", Model.GroupCriteria.Name))</button>

...

<button type="submit">@Translation.Update</button>

在控制器中:

public ActionResult GetUsers(GroupCriteriaModel groupCriteria, string removeCriterion)
{
    if("Name".Equals(removeCriterion)) groupCriteria.Name.Clear();
    ...
    return View(modelWithCriterias);
}

现在发生了什么:

当我通过单击选择然后单击&#34;更新&#34;来选择/取消选择某些值时,一切正常:返回页面中的选择与发布的内容相同。

现在我点击&#34; X&#34;清除&#34;名称&#34;。 &#34; removeCriterion&#34;等于&#34;名称&#34;,因此清除名称列表(在调试器中我看到它是空的)。 View中的调试器:&#34; Model.GroupCriteria.Name&#34;仍然是空的,没有&#34; Model.NameList&#34;被选中&#34; (设置为true)。但是返回的HTML包含与之前相同的选择(相同的项目具有属性&#39; selected =&#34; selected&#34;&#39;)。

MVC是否进行了某种缓存?怎么避免这个?

1 个答案:

答案 0 :(得分:0)

最有可能是ModelState绑定,所以你应该清除它:

if("Name".Equals(removeCriterion))
{
    groupCriteria.Name.Clear();
    ModelState.Clear();
}

如果您想以更具体的方式执行操作,可以使用ModelState.Remove()以仅删除与ListBox相关的状态。