嘿伙计们,我想了解一下HTML表单的工作方式。我的理解是,使用GET作为其方法的表单为所述提交的表单标记内的所有字段提交名称/值对。但是,如果您看一下Google的以下示例(我在很多其他地方也看过这个例子)并且只使用表单上的一个字段:
http://books.google.co.uk/advanced_book_search
不是将高级搜索页面的每个字段发送到具有名称/值对的页面,而是将其带到更清晰的URL:
http://www.google.co.uk/search?tbo=p&tbm=bks&q=hitchiker&num=10
尽管高级搜索页面上有所有输入字段。
在我的问题上......我自己的高级搜索页面非常大,目前正在发布到我的搜索结果页面,该页面正在接收值并进行相应的搜索,没有问题!但是,我希望我的用户能够书签/共享他们的搜索,为了做到这一点,我需要将项目传递到查询字符串,但如果我不需要它,我不想要大量的查询字符串。如果我的用户仅使用颜色搜索,那么我希望URL类似于search.aspx?color = red;如果他们按颜色和大小搜索,则搜索.aspx?color = red& size = large等等。这可能吗?
为了使事情更复杂,我正在使用ASP.NET,所以创建一个使用GET的表单并不是最简单的事情,尽管我相信我已经找到了它。
如果你能给出正确方向的建议或推动,那么谢谢! :)
答案 0 :(得分:2)
如果您有条件地检查结果页面上的查询字符串以确保键/值存在,那么您建议的内容应该很容易实现。
if(Request.QueryString["color"] != "")
{
// Add color to the seach parameters
}
要创建GET请求,我认为您需要POST回搜索表单并从那里重定向到结果表单,在需要时动态地将键/值添加到查询字符串。此Post/Redirect/Get设计模式通常与Web表单一起使用,以帮助进行书籍标记。
答案 1 :(得分:0)
如果要在用户之间共享书签搜索,则必须在发布的URL中共享名称/值查询字符串选项。如果没有指定,那么听起来你不想包括这对。这很简单,只需为用户提供输入的对动态构建查询字符串。因此,在处理时,循环遍历所有输入控件,如果提供了值,则将其附加到查询字符串,或者不是。