【问题标题】:Viewmodel contents null after ajax call?ajax调用后Viewmodel内容为空?
【发布时间】:2016-02-15 20:10:36
【问题描述】:

我正在创建一个 ASP.NET MVC 应用程序。我目前正在开发一个搜索页面,其中搜索框和结果表都显示在同一页面上。为此,我使用了带有视图模型的部分视图和 AJAX/JSON 调用。在文本框中输入两个搜索词后,通过ajax后在控制器中都为null。

代码如下:

视图模型:

public class ExampleViewModel
{
    public string search { get; set; }
    public string search2 { get; set; }

}

控制器:

[HttpPost]
    public ActionResult Search(ExampleViewModel searchTerm)
    {
        var searchList = db.UserLists.Where(x => x.LastName.Contains(searchTerm.search));

        return PartialView("_SearchResultsPartial", searchList);
    }

索引视图主体:

<body>
<div>
    @Html.TextBoxFor(model => model.search)
    @Html.TextBoxFor(model => model.search2)
    <input type="submit" value="Search" onclick="return getSearchResults()"/>

</div>

<div id="search-results">

</div>

<script>
    var exViewModel = {
        search: $('#search').val(),
        search2: $('#search2').val()
    }

    function getSearchResults() {        

    $.ajax({
        type: "POST",
        data: JSON.stringify(exViewModel),
        dataType: "json",
        contentType: "application/json",
        url : "/View/Search/",
        success: function (result) {
            $("#search-results").html(result);
        }
    });
    }


</script>

同样,在 Search [POST] 方法上设置断点后,ExampleViewModel 的术语为空。

【问题讨论】:

  • 除了接受的答案外,建议您只需将元素包装在&lt;form&gt; 并使用data: $('form').serialize(),(并删除contentType: "application/json",

标签: javascript c# json ajax asp.net-mvc


【解决方案1】:

乍一看,您似乎必须检索函数范围内的值:

function getSearchResults() {        
    //Read these values on button click
    var exViewModel = { 
        search: $('#search').val(),
        search2: $('#search2').val()
    }

    $.ajax({
        type: "POST",
        data: JSON.stringify(exViewModel),
        dataType: "json",
        contentType: "application/json",
        url : "/View/Search/",
        success: function (result) {
            $("#search-results").html(result);
        }
    });
}

否则,exViewModel 仅在页面加载时确定。

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多