MVC DropDownList选项首先正确更新TryUpdateModel

时间:2009-12-15 00:59:45

标签: asp.net-mvc model-view-controller drop-down-menu

我有一个选择列表,其中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;

为什么会这样?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为optionLabel没有与之关联的值。因此,当MVC尝试将表单值绑定到模型时,它不会看到select的条目并假定它为null。然后,当您执行TryUpdateModel时,它会忽略该值。要获得所需的操作,请为optionLabel添加null并自行插入。您可以使用javascript来执行此操作,但正确的方法是将其放入进入视图的选项列表中。