首先,如果这看起来很愚蠢,请原谅我,但我无法解决这个问题。
我有一个具有以下结构的MVC页面(不使用HTML.BeginForm
):
<form id="frmMiniSearch" method="post">
... search controls are here ...
<%: Html.DropDownListFor(model => model.VehicleCondition, Model.Condition, new {@class = "form-control",@required="true"}) %>
<input type="submit" value="Search" />
</form>
<script type="text/javascript">
jQuery(document).ready(function(){
$("#VehicleCondition").bind("change", function(){
$("#frmMiniSearch").attr("action", "/quick-search/used/honda/civic/1968-2018")
});
});
</script>
执行上述JavaScript后,我可以看到表单(frmMiniSearch
)操作更改为/quick-search/used/honda/civic/1968-2018
。但是,当我点击Submit
按钮,而不是调用正确的操作方法时,它会调用其他方法。
以上网址格式在我的RouteConfig.cs文件中设置:
routes.MapRoute(
name: "VehicleMiniSearchResult",
url: "quick-search/{cond}/{makeSlug}/{model}/{yearRange}",
defaults: new { controller = "SearchResult", action = "VehicleQuickSearch", id = UrlParameter.Optional }
);
我也试过这个:
$(document).ready(function(){
$("submit").click(function( e ) {
e.preventDefault();
$("#frmMiniSearch").submit();
});
});
结果是一样的。仍在呼唤错误的方法。
我做错了什么?任何建议都会挽救我的生命。
注意:如果我想使用Html.BeginForm
来调用正确的方法,我该如何使用路由模式(即quick-search/used/honda/civic/1968-2018
)来调用它?类似的东西:
<% using(Html.BeginForm, "Action", "Controller", <something here?>) {} %>
我尝试了Html.BeginRouteForm
,但这似乎也没有用。
感谢您的建议。
编辑:
以下是RouteConfig.cs中出现的路径
routes.MapRoute(
name: "VehicleSearchResult",
url: "vehicles/search/",
defaults: new { controller = "SearchResult", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "VehicleMiniSearchResult",
url: "quick-search/{cond}/{makeSlug}/{model}/{yearRange}",
defaults: new { controller = "SearchResult", action = "VehicleQuickSearch", id = UrlParameter.Optional }
);
据我所知,在Orchard CMS中我们需要记住路由顺序,但对于纯MVC应用程序也是如此吗?
顺便说一下,当我直接在浏览器中输入URL时,路由(quick-search/used/honda/civic/1968-2018
)有效,我得到了想要的结果。然后它没有调用另一种方法。只有在我尝试通过JS提交表单时才会发生。
答案 0 :(得分:0)
这不是准确的解决方案,只是一个建议。
为什么不能使用静态操作并在查询字符串或正文中传递参数? 通过这种方式,你可以避免动态的uris。
或从javascript函数调用uri
$(document).ready(function(){
$("submit").click(function( e ) {
e.preventDefault();
//$("#frmMiniSearch").submit();
//Call your uri here like window.location="";
});
});