首先,如果这看起来是一个愚蠢的问题,请原谅我,但我无法解决这个问题。
我有一个具有以下结构的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执行时,我可以看到form (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提交表单时,才会发生这种情况。
发布于 2018-04-02 15:29:36
这不是准确的解决方案,它只是一个建议。
为什么不能使用静态操作,在查询字符串或主体中传递参数?这样,您就可以避免使用动态uris。
或者从javascript函数调用uri,如下所示:
$(document).ready(function(){
$("submit").click(function( e ) {
e.preventDefault();
//$("#frmMiniSearch").submit();
//Call your uri here like window.location="";
});
});https://stackoverflow.com/questions/49606539
复制相似问题