首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JavaScript动态添加表单动作时C# MVC未调用正确的动作方法

通过JavaScript动态添加表单动作时C# MVC未调用正确的动作方法
EN

Stack Overflow用户
提问于 2018-04-02 14:43:29
回答 1查看 151关注 0票数 3

首先,如果这看起来是一个愚蠢的问题,请原谅我,但我无法解决这个问题。

我有一个具有以下结构的MVC页面(不使用HTML.BeginForm):

代码语言:javascript
复制
<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文件中设置的:

代码语言:javascript
复制
routes.MapRoute(
   name: "VehicleMiniSearchResult",
   url: "quick-search/{cond}/{makeSlug}/{model}/{yearRange}",
   defaults: new { controller = "SearchResult", action = "VehicleQuickSearch", id = UrlParameter.Optional }
);

我还尝试了这个:

代码语言:javascript
复制
$(document).ready(function(){
   $("submit").click(function( e ) {
     e.preventDefault();
     $("#frmMiniSearch").submit();
   });
});

结果是一样的。仍然调用错误的方法。

我做错了什么?任何建议都能救我的命。

注意:如果我想使用Html.BeginForm调用正确的方法,我如何使用路由模式(即quick-search/used/honda/civic/1968-2018)来调用它?类似于:

代码语言:javascript
复制
<% using(Html.BeginForm, "Action", "Controller", <something here?>) {} %>

我尝试过Html.BeginRouteForm,但似乎也不起作用。

谢谢你的建议。

编辑:

以下是按路径在RouteConfig.cs中出现的顺序排列的路径

代码语言:javascript
复制
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提交表单时,才会发生这种情况。

EN

回答 1

Stack Overflow用户

发布于 2018-04-02 15:29:36

这不是准确的解决方案,它只是一个建议。

为什么不能使用静态操作,在查询字符串或主体中传递参数?这样,您就可以避免使用动态uris。

或者从javascript函数调用uri,如下所示:

代码语言:javascript
复制
$(document).ready(function(){
   $("submit").click(function( e ) {
      e.preventDefault();
      //$("#frmMiniSearch").submit();
      //Call your uri here like window.location="";

   });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49606539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档