[英]Passing data to a controller with $.ajax (MVC 4)
我有以下编辑器模板:
DropDownListEditorTemplate
@model DropDownListViewModel
<script type="text/javascript">
$(function() {
$("select").on("change", function () {
$.ajax({
type: "POST",
url: '@Url.Action("ListItemChanged", "Controller")',
data: { "Value": "@Model.Items.FirstOrDefault(x => x.Selected).Value" }
});
});
})
</script>
@Html.DropDownListFor(m => m.Value, Model.Items, "(Select)")
调节器
public ActionResult ListItemChanged(string selectedItem)
{
// Stuff.
}
问题是当加载编辑器模板时,我得到一个错误,说@ Model.Items为null(“对象引用未设置为对象的实例”)。 这是有道理的,除了为什么在没有任何选择项目改变的情况下评估该行? 即使我将$ .ajax调用更改为仅在1 == 2时执行,它仍然会给我错误。 很明显,即使jQuery函数没有执行,也会对该行进行评估。
鉴于此,我该如何防止发生错误? @ Model.Items.First(x => x.Selected).Value只有在选择了下拉列表项后才会有值。
尝试这个:
@model DropDownListViewModel
<script type="text/javascript">
$(function() {
$("select").on("change", function () {
$.ajax({
type: "POST",
url: '@Url.Action("ListItemChanged", "Controller")',
data: { "Value": $(this).val() }
});
});
})
</script>
@Html.DropDownListFor(m => m.Value, Model.Items, "(Select)")
您必须了解的是,@expressions在服务器内进行了解析。 您还必须了解MVC模型绑定器根据其名称区分字段。 在jquery ajax函数的数据对象内部,您传递对象文字,您必须指定变量的名称,就像您的操作方法所期望的那样( 在您的情况下,为selectedItem )。 所以正确的方法应该是:
$("select").on('change', function () {
$.ajax({
type: 'POST',
url: '@Url.Action("ListItemChanged", "Controller")',
data: { "selectedItem": $(this).val() }
});
});
//Server
[HttpPost]
public ActionResult ListItemChanged(string selectedItem)
{
// Stuff.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.