我在视图中有以下代码:
<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是否进行了某种缓存?怎么避免这个?
答案 0 :(得分:0)
最有可能是ModelState
绑定,所以你应该清除它:
if("Name".Equals(removeCriterion))
{
groupCriteria.Name.Clear();
ModelState.Clear();
}
如果您想以更具体的方式执行操作,可以使用ModelState.Remove()
以仅删除与ListBox相关的状态。