如何从 mvc 控制器触发 html href 事件

How to trigger a html href event from a mvc controller

我有一个添加了 Angular 的 MVC 项目。我正在使用 ngRoute 进行路由。除了一些剃须刀视图外,一切都很好。特别是需要将所选对象的 ID 传递给下一个视图的视图。因此,当我管理用户并单击编辑或详细信息时,我需要该控制器 return 模拟 html href 事件。不确定这是否可能。欢迎就其他方法提出任何建议。

@Html.ActionLink("Edit", "Edit", new { id = item.Id }) 

管理员控制器

   // GET: /Users/Edit/1
    public async Task<ActionResult> Edit(string id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        var user = await UserManager.FindByIdAsync(id);
        if (user == null)
        {
            return HttpNotFound();
        }

        var userRoles = await UserManager.GetRolesAsync(user.Id);

        return View(new EditUserViewModel()
        {
            Id = user.Id,
            UserName = user.UserName,
            Email = user.Email,
            CompanyName = user.CompanyName,
            Name = user.Name,
            RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem()
            {
                Selected = userRoles.Contains(x.Name),
                Text = x.Name,
                Value = x.Name
            })
        });
    }

我需要通过 angular 以某种方式路由它,例如用户创建页面

 <a href="#!/usersAdminCreate"><span class="nav-label">Add User</span></a>

如果您有 angular,则无需在 MVC 中执行此操作。您单击以编辑的项目可以将对象作为对象传递给下一个视图或服务。它将成为 http 上下文的一部分。从您的表单中,您可以将一个函数调用到您的 angular 控制器中,然后该控制器会将对象传递给 angular 服务,然后调用 webapi。对象的上下文将传递给 API 控制器。

从您的 angular 控制器,您可以设置类似于:

app.controller('myCtrlr', function($scope, myService){
   $scope.edit = yourservicename.edit(item);
});

然后从您的 angular 服务中您可以这样调用

function edit(item) {
    return $http.post('apiroute/edit/', item , {

    }).then(function (response) {
        return response.data;
    });
};

如果调用成功,它将 return 更新后的对象发送到控制器,以便您可以根据需要更新并重新绑定 UI。

您可以使用以下方法从您的控制器中检索对象上下文:

[Route ("apiroute/edit/")]
    [HttpPost]
    public yourModel Edit([FromBody]YourModel item)
    {
        YourModel result = new YourModel();

    //.... do stuff
        return result;

    }

作为参考,我建议将其包装在 IHttpActionResult 中,这样您就可以 return 一个很好的错误响应。

如果您不想使用 angular,我建议研究一下如何 bootstrap 使用 MVC 控制器的视图 angular。这将允许您将数据预加载到可以根据需要绑定到 angular 的视图中。如果您不熟悉这种方法,Here 是一个很好的 link 入门方法。

希望对您有所帮助。