2015-12-30 2 views
2

Я пытаюсь снизить роль пользователя, щелкнув ссылку в моем представлении.Передача строки в контроллер/действие из вида

Когда я нажимаю ссылку, она не переходит к действию, но она просто дает ошибку 404 и связывает ресурс, который не найден со строкой, которую я пытаюсь передать в действие (называемый «stringparameter» «)

В этом случае ссылка/Admin/Отключить/stringparameter

Я думаю, что я не использую правильную перегрузку, так что кто-то может помочь мне? Благодаря

Это действие в AdminController

[HttpPost] 
    public ActionResult Disable(string id) 
    { 
     Role rol = new UserRepository().GetRole("Disabled");    
     new UserRepository().UpdateUser(id,rol.RoleId); 
     return RedirectToAction("Users"); 
    } 

это ViewModel

public class UserSuperUserPM 
{ 
    public UserClass User { get; set; } 
    public List<UserClass> Users { get; set; } 

    public UserClass SuperUser { get; set; } 
    public List<UserClass> SuperUsers { get; set; } 

    public UserClass Disabled { get; set; } 
    public List<UserClass> Disableds { get; set; } 

    public UserClass Inactive { get; set; } 
    public List<UserClass> Inactives { get; set; } 
} 

это Класс_пользователей

public class UserClass 
{ 
    public string UserId { get; set; } 
    public string Username { get; set; } 
    public string Role { get; set; } 
} 

и это мнение (1 из 4 аналогичные таблицы на вид)

@foreach (var item in Model.Users) 
{ 
    <tr> 
     <td class="col-md-4"> 
      @Html.DisplayFor(modelItem => item.Username, Model.Users) 
     </td> 
     <td class="col-md-4"> 
      @Html.DisplayFor(modelItem => item.Role, Model.Users) 
     </td> 
     <td calss="col-md-4"> 
--------Commented attempted links(none of them work correct) 
      @*@Html.ActionLink("Disable", "Disable", new { Controller = "Admin", action = "Disable", id = item.UserId })*@ 
      @*<a href="~/Controllers/AdminController/[email protected]">Disable</a>*@ 
      @*@Html.ActionLink("Disable","Admin", new { id = item.UserId },null)*@ 
      @*@Html.ActionLink("Disable", "Disable","Admin", item.UserId)*@ 

-------original attempted link 
      @Html.ActionLink("Disable", "Disable", new { id = item.UserId}) 




     </td> 
    </tr> 
} 

+1

Вашего контроллер требует действий POST, не GET. –

ответ

2

Это потому, что href атр в a элемент просто GET DonT POST, так это работает изменить действие на:

[HttpGet] 
public ActionResult Disable(string id) 
{ 
    Role rol = new UserRepository().GetRole("Disabled");    
    new UserRepository().UpdateUser(id,rol.RoleId); 
    return RedirectToAction("Users"); 
} 

Но я предлагаю вам сделать это с помощью JS.

+0

О, глупо меня, забыв, что нужно ПОЛУЧИТЬ, спасибо, что указали! во время курса мы научились делать это так, так что ради использования методов моего учителя, как я их знаю, я буду продолжать использовать его так, возможно, я могу попробовать JS для будущих проектов, спасибо за отзыв ^^ – Sibeal

1

Просто удалите [HttpPost] он говорит, что только этот контроллер может быть доступом методом POST вы пытаетесь получить доступ с помощью GET, вы должны позволить ей опубликовать и сделать звонок с АЯКСОМ

+0

о, глупо меня, забыв, что нужно ПОЛУЧИТЬ, спасибо, что указали! – Sibeal

+0

Позор вашей коровы. np XD – Totodile

Смежные вопросы