我不确定使用Ajax.Beginform是否是正确的方法,我现在尝试了一些不同的东西。
我有一个文本框和一个按钮,用户可以用它来搜索数据库。它们位于我的_layout页面上。我最初在我的索引页面上有这个,并使用ajax.begin表单来呈现局部视图。我想向用户显示URL,以便他们可以在浏览器中正确导航,所以我已将搜索部分移动到我的_layouts页面,我想将其连接起来,这样如果它们在索引页面上,它会回发到搜索页面。如果它们在搜索页面上,那么它将呈现局部视图。
我试图让它只是导航到一个新页面。我已经尝试使用Ajax.begin表单(下面的代码)并直接向按钮添加代码(也在下面),但还没有让它重定向。使用Ajax,我看到响应在浏览器调试窗口的“网络”选项卡中返回,但它不会在页面上呈现。
以下是代码:
Ajax尝试:
@using(Ajax.BeginForm(“搜索”,“主页”,新的AjaxOptions { HttpMethod =“GET” })) {
<div class="form-group" style="width:85%;"> <div class="right-inner-addon"> <i class=" glyphicon glyphicon-search"></i> <input type="text" data-autocomplete="@Url.Action("Quicksearch","Home")" class="form-control" placeholder="Search" name="q" value="@ViewBag.CurrenetFilter" /> </div> </div> <div class="form-group"> <button class="btn btn-default form-inline" type="submit">Search</button> </div> } <br /> </div> </div> @RenderBody()
这是在家庭控制器上:
public ActionResult Search(string q, int? page, string catb = null)
{
return RedirectToAction("Search", "Items", new { query = q, pageNum = page, categoryB = catb });
}
这是在项目控制器上:
public ActionResult Search(string query, int? pageNum, string categoryB = null)
{
var pageNumber = pageNum ?? 1; // if no page was specified in the querystring, default to the first page (1)
var items = db.items_with_descriptions
.Where(r => r.category_c.Contains(query) && r.category_b.Contains(categoryB) || string.IsNullOrEmpty(query) || string.IsNullOrEmpty(categoryB))
.OrderBy(r => r.level);
var onePageOfProducts = items.ToPagedList(pageNumber, 10); // will only contain 25 products max because of the pageSize
if (!string.IsNullOrEmpty(query))
{
ViewBag.CurrenetFilter = query;
}
//delete
if (!string.IsNullOrEmpty(categoryB))
{
ViewBag.Catb = categoryB;
}
ViewBag.OnePageOfProducts = onePageOfProducts;
return View(items.ToPagedList(pageNumber, 10));
}
最后,我还尝试删除了ajax引用并将以下内容添加到按钮中:
<button class="btn btn-default form-inline" type="submit" onclick="window.location.href=@Url.Action("Search", "items",new {q=@ViewBag.CurrenetFilter})">Search</button>
当我这样做时没有任何事情发生。