我有一个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>
答案 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是一个很好的链接,如果您不熟悉这种方法,可以帮助您入门。
希望这有帮助。