【问题标题】:Invalid url in form rendered by html.beginformhtml.beginform 呈现的表单中的 url 无效
【发布时间】:2015-08-08 00:05:15
【问题描述】:

我有一个混合了 WebForms 和 MVC 的应用程序。

HomeController 是一个简单的控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

在视图中 - /Views/Home/Index.cshtml,我使用 Html.BeginForm 来呈现表单。

@using(Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form-horizontal"}))
{
    @Html.TextBox("username", "");
    @Html.Password("password", "");
    <button type="submit">Login</button>
}

路由配置如下。前 2 条路由使用 MapPageRoute 映射到网络表单。

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapPageRoute("admin", "admin", "~/admin.aspx");
 routes.MapPageRoute("adminEdit", "adminEdit", "~/adminEdit.aspx");
 routes.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );

但是在我的主页(“主页”是我的默认控制器)呈现给浏览器之后,表单操作有 url:

/admin?action=Index&controller=Home

不是“/Home/”,即使我已将“Index”和“Home”作为 actionname 和 controllername 分别传递给 Html.Beginform。

当我浏览到我的主页时,网址路由工作正常。但是表单的“操作”有无效的 url。它似乎与我配置的第一条路线相匹配。为什么?

【问题讨论】:

    标签: asp.net asp.net-mvc routing asp.net-mvc-routing


    【解决方案1】:

    我按照in this post 的说明让它工作了:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    routes.MapPageRoute(
        routeName: "admin",
        routeUrl: "{pagename}",
        physicalFile: "~/{pagename}.aspx");
    
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    但是,我无法解释为什么在这种情况下需要该参数才能使其不匹配。

    【讨论】:

    • 我同意你的看法。我注意到参数必须让这个工作正常。我的应用程序中不能有你的第一条规则,因为只有 admin.aspx 和 adminEdit.aspx 应该有这个规则(无扩展 url),其他页面有其他规则。所以我将它们分成2个静态无参数规则。但对我来说奇怪的是为什么 Html.beginform 与无参数规则匹配。我删除了这2条规则并通过url重写来处理它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2017-09-07
    • 2021-04-21
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多