jQuery 表单序列化不会将下拉列表的值提交给控制器。该控件正在从我在 .cshtml 文件中的方式获取 ID 和名称。
网页代码
@using (Html.BeginForm("", "", FormMethod.Post, new { id = "productForm" }))
{
@Html.DropDownListFor(c => c.OnlineProduct.Class_Id, HelperMethods.LoadProductClass(Model.BrandType), new { @class = "col-sm-2", @style = "width:266px;font-family:monospace;height:30px;float:left" })
}
jQuery
$.post('/Product/ReviseProduct', $('#productForm').serialize() + '&brandId=' + $('#BrandId').val() + '&brandType=' + $('#BrandType').val())
控制器代码
public ActionResult ReviseProduct(ProductViewModel vModel, int brandId, byte brandType)
查看型号代码
public class ProductViewModel { public Online_Product OnlineProduct { get; set; } }
查看页面源
<select class="col-sm-2" data-val="true" data-val-number="The field Class_Id must be a number." data-val-required="The Class_Id field is required." id="OnlineProduct_Class_Id" name="OnlineProduct.Class_Id" style="width:266px;font-family:monospace;height:30px;float:left">
<option value="">Choose ...</option>
<option value="23">Aloe</option>
<option value="4">Sparkling</option>
<option selected="selected" value="3">White</option>
<option value="17">Wine Cooler</option>
</select>
请帮助为什么控制器没有获得此下拉列表的值。
如果您尝试将$('#productForm').serialize()
切换到
'vModel={"OnlineProduct":{"Class_Id":' + $('#productForm select').val() + '}}'
我相信您的$('#productForm').serialize()
将返回一个字符串,例如'OnlineProduct.Class_Id=3'
(我测试过(,并且您的控制器无法识别该值以将其反序列化为ProductViewModel
对象。
我在表单中创建了一个隐藏字段来获取值 @Html.HiddenFor(n => n.OnlineProduct.Class_Id( 现在,视图模型正在接收对象上的选定值