Jquery 在控制器中调用了两次操作方法

Jquery 在控制器中调用了两次操作方法,jquery,asp.net-mvc,views,controllers,Jquery,Asp.net Mvc,Views,Controllers,MVC控制器中的操作被jQuery代码调用了两次。在做了一些调查之后,我发现这个链接是由jQuery和MVC视图触发的 $('.treeview-menu li a[name="environments"]').on("click", function () { debugger; var genericId = $(this).attr('id'); if (genericId != undefined) { $.ajax({ t

MVC控制器中的操作被jQuery代码调用了两次。在做了一些调查之后,我发现这个链接是由jQuery和MVC视图触发的

$('.treeview-menu li a[name="environments"]').on("click", function () {
    debugger;
    var genericId = $(this).attr('id');
    if (genericId != undefined) {
        $.ajax({
            type: "GET",
            url: "/Configuration/Development",
            data: { 'genericId': genericId } ,
            datatype: "application/json",
            success: function (data) { }
        })
    }
    else {
        return;
    }
});
[HttpGet]
公共操作结果开发(DashBoardViewModel模型,字符串genericId)
{            
ViewBag.EnvironmentType=“开发”;
DeploymentConfiguration_DAL_deploymentDal=新的DeploymentConfiguration_DAL();
model.Configuration=_deploymentDal.FetchDeploymentConfigurationByEnvironmentID(Convert.ToInt32(Convert.ToInt32(genericId));
if(model.Configuration!=null)
{
返回视图(“索引”,模型);
}
返回视图(“索引”);
}    
查看正在填充链接的位置

<li>
    <a href="#"><i class="fa fa-circle-o"></i> Deployment Environment</a>
    <ul class="treeview-menu">
        @foreach (var item in ViewBag.Environments)
        {
            <li>
                <a href="@Url.Action(@item.Name,"Configuration")" id="@item.GenericMasterId" name="environments">
                    <i class="fa fa-circle-o"></i>
                    @item.Name
                </a>
            </li>                                                                                                                         
        }                          
    </ul>
</li>
    • @foreach(ViewBag.Environments中的变量项) {
    • }
  • 我面临的问题是当应用程序运行时以及单击任何动态生成的链接后。action方法第一次运行并填充我的模型,但是没有在我的视图中显示它,而是再次点击action方法,从而填充模型中的
    null
    ,因为文本框没有与db值绑定


    请帮我解决这个问题。是否有一种方法可以在不使用jQuery的情况下访问操作结果中
    href
    id

    尝试替换href=“#”@Url.Action(@item.Name,“配置”)

    <a href="#" id="@item.GenericMasterId" name="environments">
    
    
    

    这就是为什么您有两个对控制器的调用,一个在jquery中单击,另一个在单击链接时调用。

    如您在问题中所述,发生的情况是:

    • jquery运行良好(但您的问题代码与视图无关)
    • href上的链接将页面重定向到新视图
    如果要获取页面而不重定向,可以:

    • a
      更改为
      按钮类型=按钮
    • 从事件处理程序返回false
    • 从事件处理程序调用event.preventDefault()
    • 删除
      href=
      (通过更改为按钮)
    • 根据其他答案,可能会更改为
      #
      ,但建议不要这样做,如果没有上述更改,也会产生其他副作用
    如果要重定向(而不是停留在同一页面上),如您所说的“不使用jquery”那样传入id,然后更改
    @Url.Action
    以使用RouteValue重载:

    <a href='@Url.Action(item.Name, "Configuration", new { genericId = item.GenericMasterId })' ... />
    
    
    

    您可以扩展
    新的{genericId=
    以包含您需要的其他模型属性(尽管对您的操作进行一些更改后,id应该足够了)。

    您可以为
    显示
    html
    吗?treeview菜单包含[name=“environments”]
    元素吗?听起来您有两个
    a[name=“environments”]
    元素。它们是否嵌套?添加了我正在使用的视图