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