代码之家  ›  专栏  ›  技术社区  ›  Carles Company

重定向到路由的ASP.NET MVC窗体

  •  1
  • Carles Company  · 技术社区  · 15 年前

    您好,是否可以使用在global.asax中定义的路由发布其值(通过get请求)的ASP.NET MVC窗体?我有这样定义的形式:

    <% using (Html.BeginForm("CanviaOpcions","Sat",FormMethod.Get))
        { %>
        <fieldset>
            <legend>Opciones</legend>
            <%= Html.DropDownList("nomSat")%>
            <input type="submit" />
        </fieldset>
    <% } %>
    

    我的global.asax中的以下路径:

    routes.MapRoute(
        "Canvia Opcions",
        "Sat/{nomSat}",
        new { controller = "Sat", action = "CanviaOpcions" }
        );
    

    我希望在提交具有值xxx的nomsat的表单后,在我的浏览器中具有以下URL: http://machinename/sat/XXX

    有可能吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Carlton Jenke    15 年前

    您真的关心您导航到的URL吗,还是只关心用户看到的下一个URL是什么?

    如果你只关心用户看到的URL,那么你不需要使用你正在尝试的方法。

    您可以做的是让一个post操作读取“nomsat”参数,然后重定向到另一个具有您想要的URL的操作。

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(string nomsat)
        {
            ...
            return RedirectToAction("Detail", new RouteValueDictionary {{"nomsat", nomsat}});
        }
    
        public ActionResult Detail(string nomsat)
        {
           ...
           return View();
        }
    
        2
  •  2
  •   Çağdaş Tekin    15 年前

    不,不能使用HTML表单添加到路由参数。

    不过,您可以使用一个javascript函数来模拟行为。这样地:

    <fieldset>
        <legend>Opciones</legend>
        <%= Html.DropDownList("nomSat")%>
        <input type="button"  
         onclick="window.location=('/<%=Url.Action("CanviaOpcions", "Sat") %>/' + 
         $('#nomSat').val())" />
    </fieldset>
    
    推荐文章