MVC:如何使用DropDownListFor声明名称值

fro*_*sty 5 asp.net-mvc

我在mvc中有以下下拉列表

 <%= Html.DropDownListFor(c => c.Address.Id, new SelectList(Model.Addresses, "id", "Name", Model.Address.Id), "-- New Address --", new { @name = "[" + orderItemAddressCount + "].AddressId" })%>
Run Code Online (Sandbox Code Playgroud)

我正在尝试覆盖下拉列表中的名称值.

这是我得到的标记

 <select id="Address_Id" name="Address.Id"><option value="">-- New Address --</option>
Run Code Online (Sandbox Code Playgroud)

这是我想要的标记

 <select id="Address_Id" name="[0].AddressId"><option value="">-- New Address --</option>
Run Code Online (Sandbox Code Playgroud)

如何使用DropDownListFor声明名称值?

Dar*_*rov 11

您不能覆盖该DropDownListFor方法生成的名称.它是强类型的,名称基于您作为参数传递的lambda.如果要以您希望的方式覆盖生成的名称,则必须编写自己的扩展方法或使用非强类型DropDownList方法:

<%= Html.DropDownList(
    "[0].AddressId", 
    new SelectList(Model.Addresses, "id", "Name", Model.Address.Id), 
    "-- New Address --") 
%>
Run Code Online (Sandbox Code Playgroud)

但是你为什么要这样做呢?提交表单时,您不是绑定到同一个ViewModel吗?


Gre*_* F. 5

您可以通过在Name中使用大写N来覆盖Html.DropDownListFor上的名称.请参阅此主题:https://stackoverflow.com/a/18344087