将下拉值作为路由值传递给Ajax表单

时间:2014-02-27 16:59:17

标签: asp.net-mvc-4 asp.net-ajax viewmodel

我正在开发一个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上的FruitIdnull,并且它实际上只在POST

中设置

我的理由是正确的吗?如果是的话......如何轻松传递下拉列表中所选项目的值(Id)?

我知道我可以添加一个隐藏字段,并且每次下拉更改时都会通过jQuery填充它,但是没有更清晰的方法吗?

1 个答案:

答案 0 :(得分:1)

从链接中你有一个ajax调用

$.ajax({
    type: "POST",
    url: '@Url.Action("GetAllOrangeChocs", "ChocFactory")',
    data: {
        Selected: $('#FruitlId').val()
    }
    success: function (result) {
         $('.divContent').html(result);
    }
});

通过数据属性,您可以发送任何您想要的内容。我在这里将把所选的值放入一个名为Selector的变量中(确保在视图中调用它的任何内容与控制器上的输入参数完全匹配)。如果您有任何问题,请告诉我。