【问题标题】:ASP.NET MVC Routing , Html.BeginFormASP.NET MVC 路由, Html.BeginForm
【发布时间】:2011-05-06 23:25:40
【问题描述】:
<% using (Html.BeginForm("SearchByZip", "Dealer", new { zip = ""}, FormMethod.Get))
  { %>
<div>
<input type="text" class="padLeft" name="Zip" id="Zip" style="width: 200px" />
<input type="submit" class="btnFind" value="Find" />
</div>
<% } %>

这给了我网址“Dealer/SearchByZip?Zip=12345” 我想结束这个:“经销商/邮编/12345” (如果我手动输入网址“Dealer/Zip/12345”,它会返回正确的结果,但是当我点击提交时,它会出现“Dealer/SearchByZip?Zip=12345” 我错过了什么?

routes.MapRoute(
            "DealerSearchByZip",
            "Search/Zip/{zip}",
            new { Controller = "Dealer", action = "SearchByZip", zip = "" }
         );

【问题讨论】:

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


    【解决方案1】:

    发生这种情况是因为“Zip”是表单中的输入字段,而不是路由数据。因此,当页面呈现时,它会使用默认路由创建一个 url(“DealerSearchByZip”路由不匹配,因为 Zip 没有作为路由数据提供)。

    您可以通过 javascript 完成此操作,方法是在“zip”字段更新时更新表单上的“action”属性。 使用 jQuery 的示例:

    $('input[name=Zip]').update(function(){
        $('form').attr('action', 'Dealer/Zip/' + $(this).val());
    });
    

    或者,由于 Zip 是您唯一担心的值,

    $('form').submit(function(){
        window.location = 'Dealer/Zip/' + $('input[name=Zip]').val();
    });
    

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多