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

时间:2015-02-09 00:52:31

标签: asp.net-mvc angularjs razor

我有一个MVC项目,我添加了Angular。我使用ngRoute进行路由。一切都很好,除了一些剃刀的意见。特别是需要将所选对象的id传递给下一个视图的视图。因此,当我管理用户并单击编辑或详细信息时,我需要该控制器返回模拟的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
            })
        });
    }

我需要以某种方式通过角度进行路由,例如用户创建页面

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

1 个答案:

答案 0 :(得分:1)

如果你有角度,你不需要在MVC中这样做。您单击以编辑的项目可以将对象作为对象传递给下一个视图或服务。它将成为http上下文的一部分。从表单中,您可以将函数调用到角度控制器中,然后将对象传递给角度服务,然后调用webapi。对象的上下文将传递给API控制器。

从角度控制器中你可以设置类似的东西:

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

然后从您的角色服务中,您可以调用类似这样的内容

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

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

如果调用成功,它会将更新的对象返回给控制器,以便您可以根据需要更新重新绑定UI。

您可以使用以下命令从控制器检索对象上下文:

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

    //.... do stuff
        return result;

    }

对于推荐,我建议将其包含在IHttpActionResult中,这样你就可以回复一个好的反应。

如果您不想使用角度,我建议您研究如何使用MVC控制器为角度引导视图。这将允许您将数据预加载到视图中,该视图可以根据需要绑定到角度。 Here是一个很好的链接,如果您不熟悉这种方法,可以帮助您入门。

希望这有帮助。