如何使用提交按钮创建一个简单的搜索框以在MVC中恢复结果集?

时间:2010-05-17 23:21:02

标签: c# asp.net .net asp.net-mvc

我对MVC很新,只是学习基础知识。我一直在Nerd Dinner中跟随并使用该演示来创建我自己的应用程序。我创建了一个页面,其中列出了一些含有卡路里,脂肪,蛋白质等的食物......(http://rjsfitness.net/CalorieList)这是我为测试MVC而设置的个人网站之一。我有很多工作,但我被一个搜索按钮卡在文本框上。

我的观看页面包含以下搜索代码:

    <form action="/CalorieList/Search" method="post" id="searchForm">
  <input type="text" name="searchTerm" id="searchTerm" value="" size="10" maxlength ="30" />
  <input type ="submit" value="Search" />
</form>

我的global.asax有这个路由代码:

        routes.MapRoute(
            "Search", // Route name
            "CalorieList/Search/{searchTerm}", // URL with parameters
            new { controller = "CalorieList", action = "Search", search = "" } // Parameter defaults
        );

我的控制器有以下代码:

        public ActionResult Index(int? page)
    {
        const int pageSize = 10;

        //load a list with the calorie list
        var calorieLists = calorieListRepository.GetAllCalorieLists();

        //var paginatedCalorieLists = calorieLists.Skip((page ?? 0) * pageSize).Take(pageSize).ToList();
        var paginatedCalorieLists = new PaginatedList<CalorieList>(calorieLists, page ?? 0, pageSize);

        return View("Index", paginatedCalorieLists);
    }

    public ActionResult Search(String searchTerm)
    {
        const int pageSize = 100;
        int? page = 0;

        var calorieLists = calorieListRepository.GetCalorieListsBySearch(searchTerm);

        var paginatedCalorieLists = new PaginatedList<CalorieList>(calorieLists, page ?? 0, pageSize);

        return View("Index", paginatedCalorieLists);
    }

        return View("Index", paginatedCalorieLists);
    }

当我输入一个值并单击按钮时,Index方法将触发而不是控制器中的Seach方法,我再次获得完整列表。如果我手动输入网址(http://rjsfitness.net/CalorieList/Search/choc),我会获得正确的商家信息。

为什么我的按钮没有使用正确的路由点击并给我搜索结果?

2 个答案:

答案 0 :(得分:1)

您的表单实际上是指向此:

<form id="form1" action="CalorieList" method="post">

如果您使用的是Html.BeginForm,则传递的参数错误。

<% using (Html.BeginForm("Search", "CalorieList")) %>
<% { %>
// Your form fields
<% } %>

另外,为什么页面上有ViewState?

答案 1 :(得分:0)

因为我认为你会回到Index ActionResult。在Index操作中放置一个断点并查看。

您可能希望返回路线而不是视图。

修改

或者让搜索视图返回。

或者你可以做一个jQuery回发并返回一个PartialView并用返回的部分视图html替换div的内容。

如果您想要发表评论,我可以提供代码和链接。

编辑2

我在这个问题中解释了一下。如果您需要更多代码或样品,请添加其他评论,我会发布没有问题。

another approach to returning some thing to browser in mvc with ajax call instead of using response.write