我正在开发一个ASP.NET MVC4应用程序,我在其中一个视图中有以下内容:
@using (Ajax.BeginForm("GetAllOrangeChocs", "ChocFactory", new { area = "Provider", Id = Model.FruitId }, new AjaxOptions { HttpMethod = "post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "ChocFruitWrap" }, null))
{
<div class="form-horizontal" role="form">
<div class="form-group">
<span class="col-md-2 control-label"><strong>Fruit Group:</strong></span>
<div class="col-md-3">
@Html.DropDownListFor(m => m.FruitlId, new SelectList(Model.ListOf_Fruits,"Id", "PortalDisplayName"),"--Please Select--")
</div>
<div class="btn-group col-md-1">
<button type="submit" class="btn btn-primary btn-sm">Submit</button>
</div>
</div>
</div>
}
因此,它是一个Ajax表单,它调用一些控制器操作,返回一个PartialView以显示在页面上。控制器代码是:
public PartialViewResult GetAllOrangeChocs(int Id)
{
var model = _service.GetMeSomethingUsefulWithPassedParam(Id);
return PartialView("_Categories", model);
}
我的控制器操作正在被击中,但Id总是null
,我的猜测是,这是因为没有双向绑定到位!当ViewModel在GET
请求中传递时,ViewModel上的FruitId
为null
,并且它实际上只在POST
我的理由是正确的吗?如果是的话......如何轻松传递下拉列表中所选项目的值(Id)?
我知道我可以添加一个隐藏字段,并且每次下拉更改时都会通过jQuery填充它,但是没有更清晰的方法吗?
答案 0 :(得分:1)
从链接中你有一个ajax调用
$.ajax({
type: "POST",
url: '@Url.Action("GetAllOrangeChocs", "ChocFactory")',
data: {
Selected: $('#FruitlId').val()
}
success: function (result) {
$('.divContent').html(result);
}
});
通过数据属性,您可以发送任何您想要的内容。我在这里将把所选的值放入一个名为Selector的变量中(确保在视图中调用它的任何内容与控制器上的输入参数完全匹配)。如果您有任何问题,请告诉我。