我正在asp.net mvc的网站上工作。我必须显示一个视图,用户将一些搜索值(如标签和标题)添加到搜索中。我想使用相同的Index方法。我有 使我的表单使用formMethod.Get将参数作为查询字符串发送。
所以这是方法
[HttpGet]
public ActionResult Index(string title, string tags, int? page)
{
if (string.IsNullOrEmpty(title)
return View(null);
var list = GetSomeData();
return View(list);
}
这是我的观点
<div id="searchBox">
<% using (Html.BeginForm(null, null, FormMethod.Get))
{ %>
<table>
<tr>
<td>
<input type="hidden" id="isPosted" name="isPosted" value="1" />
I am looking for
<%=Html.TextBox("Title")%>
Tags:
<%=Html.TextBox("Tags")%>
<input id="search" type="submit" value="Search" />
</td>
</tr>
</table>
<% } %>
因此,当用户首次访问该页面时,他只会看到两个文本框和一个按钮。但是当他在标题和标签中键入内容并单击搜索按钮时,我将加载包含一些数据的视图。
现在问题是当我在标题和标签框中键入内容并单击搜索时,它们会在方法中收到,但在网址中不可见。有什么我做错了。
帮助将不胜感激。
此致
成员Parminder
答案 0 :(得分:2)
我建议你拆分两个控制器动作:
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string title, string tags, int? page)
{
var list = GetSomeData(title, tags, page);
return View(list);
}
在这种情况下,您绝对不再需要表单中的隐藏字段:
<% using (Html.BeginForm()) { %>
I am looking for
<%= Html.TextBox("Title") %>
Tags:
<%= Html.TextBox("Tags") %>
<input id="search" type="submit" value="Search" />
<% } %>
答案 1 :(得分:0)
对于您的具体问题,这不是一个严格的答案,更多的是关于我会做什么的建议。
对于这种类型的功能,我将使用jQuery对输入的数据进行部分回发。然后我将部分视图返回到视图并渲染它。
听起来很复杂,但事实并非如此。这给你带来的是一个流畅的搜索功能,整个页面永远不会发布,所以它看起来更光滑。
执行帖子的jQuery看起来像这样;
$.post("/articles/getFilteredTagList", { filter: tagString }, function(newHTML) {
document.getElementById("tagList").innerHTML = newHTML;
});
newHTML将包含代表局部视图的渲染html。
在你的控制器中你有类似的东西;
public ActionResult getFilteredTagList(string filter)
{
return PartialView("TagList",new Repository.KeywordsRepository().All().OrderBy(k => k.keyword1));
}
在上面的代码中,您基本上是在指示mvc渲染局部视图并返回html。这个html再次返回到你的视图,然后你可以用新的html替换div的内部。
您的局部视图可能包含其他控件,这些控件现在在已加载数据的情况下可见。
答案 2 :(得分:0)
我不明白“现在问题是当我在标题和标签框中键入内容并点击搜索时,它们会在方法中收到,但在网址中不可见。”
使用POST或GET发送数据。你已经指定了GET,我没有看到任何重定向或AJAX调用,所以我不确定你为什么不在URL中看到它。
-
请尝试以下链接中的示例代码。希望这会有所帮助。