簡體   English   中英

使用$ .ajax(MVC 4)將數據傳遞給控制器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM