MVC HTML 帮助程序下拉列表用于不提交所选值



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( 现在,视图模型正在接收对象上的选定值

最新更新