Skip to main content
 首页 » 编程设计

javascript之使用 $.ajax (MVC 4) 将数据传递给 Controller

2024年08月06日51zhenyulu

我有以下编辑器模板:

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)") 

Controller

public ActionResult ListItemChanged(string selectedItem) 
{ 
    // Stuff. 
} 

问题是当加载编辑器模板时,我收到一条错误消息,指出@Model.Items 为空(“对象引用未设置为对象的实例”)。这是有道理的,除了为什么要在不更改任何选择项的情况下评估该行?即使我将 $.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)")