使用jQuery在MVC ASP.Net中加载部分视图

时间:2009-09-25 11:01:56

标签: jquery asp.net-mvc

我对这两个都很新,所以请原谅我的基本问题。

我有一个索引页面,如:

<div id="SearchBar">              
    <%= Html.Encode("Search by Site Name: ") + Html.TextBox("SearchTextBox") %>    
    <input type="submit" value="Search" id="jQuerySubmit" />   
</div>
<div id="SiteList">   
    <% Html.RenderPartial("SiteIndexSearchResults", Model); %>                     
</div>

一切正常。

我想根据用户在“SearchTextBox”中输入的内容重新加载这个部分(我现在已经在控制器中对其进行了硬编码 - 用于测试目的)

我无法使用以下方式重新加载:

$(document).ready(function() {
    $("#jQuerySubmit").click(function() {
        $("#SiteList").load("/Site/IndexSearch/");         
    });
});

它进入控制器并确实返回基于IsAjaxResult的新视图,但不刷新页面。

提前致谢。

戴维

3 个答案:

答案 0 :(得分:2)

由于#jQuerySubmit是表单提交按钮,因此您需要阻止正常提交表单的默认操作(不使用AJAX)。为此,您需要从点击处理程序中return false

$(document).ready(function() { 
    $("#jQuerySubmit").click(function() {
        $("#SiteList").load("/Site/IndexSearch/");         
        return false;
    });
})

答案 1 :(得分:2)

您需要停止链接点击的“正常”处理。在大多数浏览器中,这是通过让点击处理程序返回false来完成的,但在Firefox中你也可以使用event.preventDefault(),如下所示:

$(function() { // Shorthand for the $(document).ready(function() { - does the same
    $('#jQuerySubmit').click(function(ev) { // Takes the event as a parameter
        ev.preventDefault();
        $('#siteList').load('/Site/IndexSearch/');
        return false;
    });
});

如果您希望将此行为应用于AJAX的更多链接,则可以使用.live()代替.click(),如下所示:

$(function() {
    $('#jQuerySubmit').live('click', function(ev) {
        // The behavior is now applied to all links that are ever loaded on the page
        // that have the id set to jQuerySubmit.
        ...
    });
});

答案 2 :(得分:0)

感谢您的回答 - 两者都非常有用。我在我的控制器(驴)中返回了View而不是PartialView。

我现在有一个textBox,它会根据文本框val逐步将行返回到我的部分列表中,这就是我一直以来的目的。

再次感谢。

戴维