action方法在控制器中被调用两次

时间:2016-11-07 12:29:25

标签: 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({
            type: "GET",
            url: "/Configuration/Development",
            data: { 'genericId': genericId } ,
            datatype: "application/json",
            success: function (data) { }
        })
    }
    else {
        return;
    }
});
[HttpGet]
public ActionResult Development(DashBoardViewModel model, string genericId)
{            
    ViewBag.EnvironmentType = "Development";
    DeploymentConfiguration_DAL _deploymentDal = new DeploymentConfiguration_DAL();
    model.Configuration = _deploymentDal.FetchDeploymentConfigurationByEnvironmentID(Convert.ToInt32(Convert.ToInt32(genericId)));
    if (model.Configuration != null)
    {
        return View("Index", model);
    }
    return View("Index");            
}    

查看正在填充链接的位置

<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>

我面临的问题是应用程序运行时以及单击正在动态生成的任何链接之后。 action方法第一次运行并填充我的模型,但不是在我的视图中显示它,而是再次点击action方法,它在模型中填充null,因为文本框没有从db绑定值。

请帮我解决这个问题。有没有办法在不使用jQuery的情况下在我的操作结果中访问id的{​​{1}}值?

2 个答案:

答案 0 :(得分:0)

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

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

这就是为什么你有2次调用你的控制器,1次在jquery点击,另外1次点击链接。

答案 1 :(得分:0)

正如您在问题中描述的那样,正在发生的事情是:

  • jquery运行正常(但您的问题代码对视图没有任何作用)
  • 上的链接将页面重定向页面为新视图

如果您想获取该页面并且不重定向,您可以:

  • a更改为button type=button
  • 从事件处理程序返回false
  • 从事件处理程序
  • 调用event.preventDefault()
  • 删除href=(通过更改为按钮)
  • 可能会根据其他答案更改为#,但建议不要这样做,并且如果没有上述任何一项更改,也会产生其他副作用。

如果您想重定向(不要停留在同一页面上),请传入ID,如您所说&#34;不使用jquery&#34;然后更改@Url.Action以使用routeValues重载:

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

您可以扩展new { genericId =以包含您需要的其他模型属性(虽然ID应该足够,但您的操作会有一些更改)。