asp.net中的Ajax.BeginForm

时间:2014-03-17 17:12:33

标签: asp.net asp.net-mvc-4

我面临的问题花了8个多小时但却无法找到解决方案。 我正在尝试在MVC4中实现ajax功能。 我在索引视图中跟踪代码。

@using (Ajax.BeginForm(
        new AjaxOptions
        {

            HttpMethod = "get",
            InsertionMode = InsertionMode.Replace,
            UpdateTargetId = "resturantList"
        }
    ))
{ 
    <input type="search" name="searchTerm" />
    <input type="submit" value="Search By Name" />
}

<div id="resturantList">

    @foreach (var item in Model)
    { 
        <div>
            <h4>@item.Name</h4>
            <div>@item.City, @item.Country</div>
            <div>Reviews: @item.CountOfReviews</div>
            <hr />
        </div>
    }
</div>

以下是点击搜索按钮时呈现的html。

"screenshot of application"


我已经检查过firebug的脚本文件引用,即使它们已包含在内

<script src="/Scripts/jquery-2.1.0.js">
<script src="/Scripts/jquery-ui-1.10.4.js">
<script src="/Scripts/jquery.unobtrusive-ajax.js">
<script src="/Scripts/jquery.validate.js">
<script src="/Scripts/jquery.validate.unobtrusive.js">

试图删除

<add key="UnobtrusiveJavaScriptEnabled" value="true" />
来自web.config文件的

解决了上述问题,但它也禁用了客户端验证。

1 个答案:

答案 0 :(得分:3)

您没有告诉表单发布哪个控制器的操作数据,这导致问题,这样做,传递控制器和操作名称:

@using (Ajax.BeginForm(
"Action", "Controller",
        new AjaxOptions
        {

            HttpMethod = "get",
            InsertionMode = InsertionMode.Replace,
            UpdateTargetId = "resturantList"
        }
    ))
{ 
    <input type="search" name="searchTerm" />
    <input type="submit" value="Search By Name" />
}

<div id="resturantList">

    @foreach (var item in Model)
    { 
        <div>
            <h4>@item.Name</h4>
            <div>@item.City, @item.Country</div>
            <div>Reviews: @item.CountOfReviews</div>
            <hr />
        </div>
    }
</div>

第二件事,确保你正在返回一个局部视图,如果完整视图正在退回,这也会导致问题。在你查看它时这样做:

@{

Layout = null

}

实际上你必须在ajax调用的响应中返回部分视图