[英]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.