2011-05-06 222 views
4
<% 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> 
<% } %> 

这给我的网址 “经销商/ SearchByZip邮编= 12345?” 我想这个就结了: “经销商/ ZIP/12345” (如果我手动键入URL“经销商/ ZIP/12345”返回正确的结果,但是当我点击提交以“经销商/ SearchByZip?邮编= 12345” 我缺少什么?ASP.NET MVC路由,Html.BeginForm

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

回答

3

出现这是因为“Zip”是表单中的输入字段,而不是路由数据。因此,当页面呈现时,它会使用默认路由创建一个url(“DealerSearchByZip”route not matc hed因为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(); 
});