ASP.NET MVC Routing,Html.BeginForm

时间:2011-05-06 23:25:40

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

<% 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 = "" }
         );

1 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为“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();
});