2015-02-09 79 views
0

我有一個MVC項目,我添加了Angular。使用ngRoute進行路由。除了幾個剃鬚刀視圖外,一切正常。特別是需要將選定對象的id傳遞到下一個視圖的視圖。因此,當我管理用戶並單擊編輯或詳細信息時,我需要該控制器返回模擬的html href事件。不知道這是否可能。任何建議在另一種方式這樣做是值得歡迎的。如何從mvc控制器觸發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

你並不需要,如果你有這樣做的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; 

    } 

對於refernece我建議在IHttpActionResult包木窗這個,所以你可以返回一個好不好迴應。

如果你不想使用角度,我會建議研究如何使用MVC控制器爲角度引導視圖。這將允許您將數據預加載到可根據需要綁定到角度的視圖中。如果你不熟悉這種方法,Here是一個很好的鏈接,可以幫助你入門。

希望這會有所幫助。