代码之家  ›  专栏  ›  技术社区  ›  Kirschstein

asp.net mvc强制表单上获取url的样式

  •  4
  • Kirschstein  · 技术社区  · 16 年前

    <p>Enter a user's id number to search:</p>
    
    <%  using (Html.BeginForm("Search", "UserAdmin", FormMethod.Get)) { %>
            
            <%= Html.TextBox("id") %>
            
            <input type="submit" value="Search" />
    <% } %>
    

    这两个URL都是有效的,并映射到我的操作,正如我所期望的,我只是认为前者更整洁,并且希望使用这种样式。

    更新:

    根据迈克尔·加图索的回答,我将此作为一个有效的解决方案。不是很优雅,但很管用。

    <p>Enter a user's id number to search:</p>
    
    <%  using (Html.BeginForm("SearchPost", "UserAdmin")) { %>
            
            <%= Html.TextBox("id") %>
            
            <input type="submit" value="Search" />
    <% } %>
    

        public ActionResult Search(string id)
        {
            var result = _Service.SearchForUsers(id);
            return View(result);
        }
    
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult SearchPost(string id)
        {
            return RedirectToAction("Search", new { id = id });
        }
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Michael Gattuso    16 年前

    这不是MVC的问题。使用GET的表单请求将根据您获得的呈现将输入附加到查询字符串。MVC中没有任何东西可以解决这个问题,因为请求没有通过路由引擎。您可以选择发布表单并发送表单,或者使用javascript。

    要在MVC中执行此操作,请使用表单POST

    <p>Enter a user's id number to search:</p>
    
    <%  using (Html.BeginForm("Search", "UserAdmin", FormMethod.Post)) { %>
    
            <%= Html.TextBox("id") %>
    
            <input type="submit" value="Search" />
    <% } %>
    

    [AcceptVerb("Post")]
    [ActionName("Search")] //I assume your current search action has this same signature so use alias
    public ActionResult SearchPost(int id){
      return new ActionResult("Search", new { Id = id });
    }