如何在MVC3中将窗体与控制器连接?

时间:2014-06-25 14:11:26

标签: c# asp.net-mvc asp.net-mvc-3

所以,我试图在列表页面(http://example.com:3480/List)上提交一个实际上是搜索实现的表单。到目前为止,我已经这样做了:

index.cshtml

@using(Html.BeginForm("Search","ListController"))
{
    <input id=query type=text name=query />
    <input id=btnsearch type=submit value=Search />
}

ListController.cs

[HttpPost]
        public ActionResult Search(FormCollection collection)
        {
            Response.Write("We are here");
            // Get Post Params Here
            string var1 = collection["query"];
            Response.Write(var1);
            return View();
        }

Global.asax中

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Details",
                "Details/{id}/{orderid}",
                new { controller = "Details", action = "Index", id = UrlParameter.Optional, orderid = UrlParameter.Optional }
            );

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
            );



        }

单击它后转到http://example.com:3480/ListController/Search,这似乎很好。

现在我想我需要在Global.aspx中定义路由但不确定。我想要的是在同一个View文件中显示结果,而不是创建一个新文件。

此时我在POST表单

后无法进入Search方法

1 个答案:

答案 0 :(得分:1)

假设您当前只使用默认路由,那么您未达到操作方法的原因是&#34; Controller&#34;您的路线上的后缀是隐含的 - 它不应该是您网址的一部分。

@using(Html.BeginForm("Search","List"))

此外,关于:

  

我想要的是在同一个View文件中显示结果,而不是创建一个新文件。

通过在View方法调用中指定视图的名称,您可以轻松地从任何控制器操作返回特定视图:

return View("Index");