2011-01-27 3 views
0

Objectif:problème Bool à ActionResult

Je veux obtenir deux paramètres (une chaîne et un bool) à mon ActionResult Anvandare_Listaa.

// 
    // GET: /Admin/Anvandare_Listaa 

    public ActionResult Anvandare_Listaa(string pAnvandaren, bool pBlivenAdministrator) 
    { 
     return View("Anvandare_Lista"); 
    } 

Problème:
Impossible de recevoir pBlivenAdministrator valeur bool dans mon résultat de l'action. Je reçois un message d'erreur.

Les paramètres dictionnaire contient une entrée nulle pour paramètre 'pBlivenAdministrator' de type non annulable 'System.Boolean' pour la méthode 'System.Web.Mvc.ActionResult Anvandare_Listaa (booléen)' dans 'BokButik1.Controllers.AdminController'. Un paramètre facultatif doit être un type de référence , un type Nullable, ou être déclaré en tant que paramètre facultatif. Nom du paramètre: paramètres

Si j'utilise bool? au lieu de bool, je n'aurai aucune valeur. Il n'y a pas de problème quand j'utilise une chaîne, c'est seulement un problème lié à bool dans le résultat de l'action.

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 
    } 
} 

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" Inherits="System.Web.Mvc.ViewPage<BokButik1.ViewModels.AllaAnvandareViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Användare Lista 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Användare Lista</h2> 

    <table> 
    <tr> 
     <th>Användare</th> 
     <th>E-post</th> 
     <th>Administratör</th> 
    </tr> 

<% foreach (var user in Model.AllaAnvandare) { %> 

    <tr> 
     <td> 
      <%: user.Anvandaren %> 
     </td> 

     <td> 
      <%: user.Epost%> 
     </td> 
     <td> 
      <%: user.BlivenAdministrator %> 
     </td> 
     <td> 

      <%: Html.ActionLink(Html.OmAdministratorBehorighet(user.BlivenAdministrator), 
       "Anvandare_Listaa", "Admin", new {pAnvandaren = user.Anvandaren, pBlivenAdministrator = user.BlivenAdministrator }) %> 
     </td> 
    </tr> 

<% } %> 
</table> 


+0

Petite remarque: Je ne sais pas ce que signifie pBlivenAdministrator, mais comme il contient le mot admin, il semble donner certains droits à l'appelant. Ce n'est pas une bonne idée d'avoir cela dans votre chaîne de requête car un non pBlivenAdministrator peut facilement le devenir en changeant la chaîne de requête dans le navigateur. ;-) – santiagoIT

Répondre

1

Lorsque vous générez votre lien d'action:

<%: Html.ActionLink(
    Html.OmAdministratorBehorighet(user.BlivenAdministrator), 
    "Anvandare_Listaa", 
    "Admin", 
    new { 
     pAnvandaren = user.Anvandaren, 
     pBlivenAdministrator = user.BlivenAdministrator 
    } 
) %> 

vous devez vous assurer que le paramètre pBlivenAdministrator est attribué une valeur de sorte que le produit Le HTML ressemble à ceci:

<a href="/Admin/Anvandare_Listaa?pAnvandaren=abc&amp;pBlivenAdministrator=true"> 
    Some Text 
</a> 

Si la demande ne contient pas le paramètre pBlivenAdministrator vous obtiendrez cette exception. Il doit donc être soit:

/Admin/Anvandare_Listaa?pBlivenAdministrator=true 

ou:

/Admin/Anvandare_Listaa?pBlivenAdministrator=false 
1

Faire un itinéraire qui prend 2 arguments. La route par défaut ne prend qu'un seul argument "id". Créez un nouvel itinéraire avec vos arguments pAnvandaren et pAnvandaren.

+0

Avez-vous la possibilité d'afficher un exemple concret? Je suis toujours un débutant –