Ajax调用控制器

时间:2014-05-20 09:32:20

标签: asp.net-mvc

我正在使用HttpPost将一些数据(复选框,字符串)从我的视图传递给控制器​​。 除了那些数据之外,我还需要传递用户选择的2个下拉列表的值,这2个没有与模型绑定,它们只是在视图中。如何做到这一点?

在视图中 - >

            加载月份:                              一月                 二月                 损伤                 四月                 可以                 六月                 七月                 八月                 九月                 十月                 十一月                 十二月                      
    <div id="loadyear">
        Load Year :
        <select name="years" class="YearDropDown">
            <option value="2012">2012</option>
            <option value="2013">2013</option>
            <option value="2014">2014</option>
        </select>
    </div>

我和其他绑定到模型的项目一起使用。当我使用form-b​​egin和HttpPost方法时,我能够从控制器中检索它们,但是如何传递loadmonth和loadyear下拉列表以便我可以在控制器中看到它们的值?

2 个答案:

答案 0 :(得分:0)

请尝试此更改。我相信它会奏效。

您可以为下拉列表设置强类型隐藏字段。在下拉更改事件中将其值放在隐藏字段中。休息模型和控制器将处理。你需要一点点javascript / jQuery。我总是喜欢jQuery

注意:您的隐藏字段必须与您在视图中使用的模型中的属性强绑定。

模型

public class MyModel
{
   // your other stuff

   public string DropDownValue { get; set; }
}

视图

<div id="loadyear">
    Load Year :
    <select name="years" class="YearDropDown">
        <option value="2012">2012</option>
        <option value="2013">2013</option>
        <option value="2014">2014</option>
    </select>
    @Html.HiddenFor(x => x.DropDownValue) 
</div>

脚本

$(function(){
   $('#loadyear select').change(function(){
       $('#DropDownValue').val($(this).val());
   });
});

控制器

[HttpPost]
public ActionResult ViewName(MyModel model)
{
   return View(model);
}

当您对此视图的HttpPost操作发现时,您实际上可以在调试器中看到属性的值。

这也可以通过ajax完成,但这将节省对代码的额外调用并为其编写一些代码。如果你真的想用ajax这样做,那么请发表评论。 希望它有所帮助:)

答案 1 :(得分:0)

只要字段在表单中,您就可以使用请求访问它们。它们不会通过MVC绑定到任何模型,但是值将出现在拍摄中。使用Controller.Request属性访问它们。