2011-05-06 273 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(); 
});