2016-08-08 76 views
0

Ich implementiere eine Website mit asp.net MVC. Ich versuche, dem Benutzer eine Rolle zuzuweisen, indem ich auf die Rolle klicke. Ich habe mehrere Möglichkeiten ausprobiert, leider habe ich versagt.Wie kann ich zwei Parameter von ActionLink zu ActionResult übergeben

Controller-Methode

[HttpPost,ActionName("AssignUserToRole")] 
[ValidateAntiForgeryToken] 
[CustomAuthorize(Roles ="SudoAdmin")] 
public ActionResult AssignUserToRole(long userId, long roleId) 
{ 
    new BusinessUser().AddRoleToUser(userId, roleId); 

     return RedirectToAction("Index"); 
} 

Ansicht

@Html.ActionLink(@r.RoleName, "AssignUserToRole", "Users", new { userId = Model.UserId, roleId = r.RoleId }) 

Zuerst versuchte ich JQuery Ajax, aber es versäumt, obwohl ich denke, dass es nicht eine sehr große Idee war. Trotzdem würde ich es gerne mit "Ajax" machen, ich meine, ohne die Seite zu aktualisieren.

Ich hoffe, meine Frage ist gut genug Dank für alle von Ihnen

+3

Definieren Sie "fehlgeschlagen". Was passiert mit deinem 'ActionLink'? – mxmissile

+0

zuerst danke für die Wiederholung. Es zeigt HTTP 404 –

+0

Was ist die URL, die versucht wird zu laden, wenn Sie auf den Link klicken? Ist Ihre Aktionsmethode in 'UsersController'? – Shyju

Antwort

4

Zuerst wird die Aktion eingestellt ist nur auf POST zu reagieren. Das bedeutet, dass Sie, wenn Sie es nicht über POST anfordern, einen 404 erhalten, da keine Aktion auf eine andere Anfrage-Methode reagieren kann.

Als Link wird es immer die Anfrage über GET stellen. Wenn Sie JavaScript verwenden, können Sie an das Ereignis click binden und die Anforderung per POST mit AJAX senden, aber Sie müssen es erneut als POST senden. Wenn Sie etwas wie $.get oder $.ajax mit der Methode als GET verwenden, wird es nicht funktionieren.

Wenn Sie die Aktion idealerweise über POST ausführen möchten, sollten Sie idealerweise ein form Element in Ihrer Ansicht verwenden. Mit CSS können Sie die Übermittlungsschaltfläche so gestalten, dass sie wie ein Link aussieht, wenn Sie das möchten. Die zugrunde liegende Struktur sollte jedoch ein Formular sein.

+0

Vielen Dank es funktioniert jetzt gut –