2010-05-28 151 views
1

我正在asp.net mvc的网站上工作。我必须展示一个视图,用户在其中放置一些搜索值,例如标签和标题以进行搜索。我想为此使用相同的Index方法。我有 使我的表单使用formMethod.Get发送参数作为查询字符串。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> 
       <% } %> 

因此,当用户第一次访问该页面时,他只能看到两个文本boxs和一个按钮。但是当他在标题和标签中键入内容并单击搜索按钮时,我将用一些数据加载视图。

现在的问题是,当我在标题和标签框中键入内容并单击搜索时,它们在方法中收到,但在url中不可见。有什么我做错了。

帮助将不胜感激。

问候

成员Parminder

回答

0

这不是striclty更多的我会做什么,而不是一个建议的回答您的具体问题。

对于这种类型的功能,我会使用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的内部。

您的部分视图可能包含其他控件,这些控件现在对已加载的数据可见。

0

我不明白关于“现在的问题是当我在标题和标签框中键入内容并单击搜索时,它们在方法中收到,但在URL中不可见”部分。

使用POST或GET发送数据。你已经指定了GET,并且我没有看到任何重定向或AJAX调用,所以我不确定你为什么没有在URL中看到它。

-

请尝试下面的链接示例代码。希望有帮助。

http://weblogs.asp.net/rajbk/archive/2010/05/08/asp-net-mvc-paging-sorting-filtering-using-the-mvccontrib-grid-and-pager.aspx

+0

他可能令人困惑的mvc与webforms是我认为它可能是 – griegs 2010-05-28 04:14:50

+0

也许他意味着ist不是可见的URL的路由部分,但只在查询字符串。 – 2010-05-28 09:58:49

+0

它的mvc,但当我张贴表格。这些参数不是url字符串的一部分。我所做的是手动添加使用JavaScript的所有参数,并将location.href设置为相同的方法。 – Parminder 2010-05-29 03:42:23

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" /> 
<% } %> 
+0

即使这个不显示参数。 – Parminder 2010-05-29 03:40:15

+0

@parminder,你期望在那里显示这些参数?我以为你在提交表单时正在讨论浏览器中的地址栏。在这种情况下,一旦你点击提交按钮,用户就可以浏览到http://yoursite.com/home/index?Title = foo&Tags = bar',其中可以清楚地看到参数及其值。你能更具体地说明你想做什么吗? – 2010-05-29 06:32:35