我有一个选择列表,其中populate提供一个空值作为以下行中的第一个选项。值=“0”显示=“选择客户类型”
<%= Html.DropDownList("Customer.CustomerType", Model.CustomerTypes, "Select a customer type", new { style = "width:200px" })%>
问题是当我选择任何选项(比如1或2或3)时 - 除了第一个(“0”) - 我的对象被正确更新。 我发帖到
public ActionResult New(Customer customer)
将2作为一个新值(以前为1)。我不使用传递给重载的Customer对象。
在New方法中,我从
获得了客户CustomerViewModel inProgress = Session[REGISTRATION_SESSION_KEY] as CustomerViewModel;
然后我运行
行TryUpdateModel<CustomerViewModel>(inProgress);
inProgress对象从1更改为2(正确)。
但是,当我从2更改为0(“选择客户类型”选项)时,inProgress将2显示为其原始值,并且在TryUpdateModel保持为2之后。
唯一的解决方法是从“客户”中获取正确的值,从他的形式传递到重载并执行此操作。
if (customer.CustomerType == 0)
inProgress.Customer.CustomerType = 0;
为什么会这样?
答案 0 :(得分:0)
这种情况正在发生,因为optionLabel没有与之关联的值。因此,当MVC尝试将表单值绑定到模型时,它不会看到select的条目并假定它为null。然后,当您执行TryUpdateModel时,它会忽略该值。要获得所需的操作,请为optionLabel添加null并自行插入。您可以使用javascript来执行此操作,但正确的方法是将其放入进入视图的选项列表中。