我想使用BegingForm和Get方法,这就是我的工作
@using (Html.BeginForm("Search","Home",FormMethod.Get))
{
//My input elements
}
public class HomeController : Controller
{
public ActionResult Search(string queryString)
{
}
}
但查询字符串总是返回null。我想,我需要做一些路线,但没有运气
routes.MapRoute(
"SearchRoute", // Route name
"Home/Search{queryString}", // URL with parameters
new { controller = "Home", action = "Search", filter = UrlParameter.Optional } // Parameter defaults
);
显然,即将到来的服务器网址就像是
主页/搜索查询= “等等” &安培; QUERY2 = “等等” &安培; QUERY3 = “嗒嗒”
我做错了什么?当我想使用get with beginform时,在控制器中获取查询参数的正确方法是什么?
此外,如果我的BeginForm的内容可以更改,因此查询字符串参数名称可能会有所不同,具体取决于呈现的页面,但我想要一个分析查询字符串并执行正确操作的搜索方法?
另外,他们是否可以查询参数进入字典?
答案 0 :(得分:1)
显然,即将到来的服务器网址是这样的 主页/搜索查询= “等等” &安培; QUERY2 = “等等” &安培; QUERY3 = “嗒嗒”
这就是带有GET方法的HTML <form>
如何工作,这与ASP.NET MVC无关,它是纯HTML。除了让控制器操作看起来像这样之外,你无法做很多事情:
public ActionResult Search(SearchViewModel model)
{
...
}
其中SearchViewModel
将包含此表单上每个输入字段的属性。此外,您不需要此SearchRoute
,因为它不会那样工作。
据说你可以使用javascript来订阅表单的onsubmit
事件,取消默认提交(展示你当前正在观察的行为),手动获取表单中的所有值然后手动生成所需的网址,并使用window.location.href = '....';
重定向到该网址。我提到这只是为了完整,但绝对不是我推荐或你应该做的事情。
答案 1 :(得分:0)
如果要从查询字符串中获取项目,只需使用ControllerBase中的“Request”对象:
public ActionResult Search()
{
var queries = new List<string>();
foreach (var parameter in Request.QueryString)
{
queries.Add(parameter.ToString());
}
//Do Stuff with the query parameters...
return View("Index");
}
“Request.QueryString”就是你想要的字典:)