2017-05-02 1 views
0

J'ai une méthode de contrôleur dans ASP.NET MVC qui ressemble à ceci:comment puis-je mettre à jour un querystring en asp.net mvc

public class HomeController : Controller 
    { 

    SessionHelper mysession = new SessionHelper(); 

    [HttpGet] 
    [ActionName("Index")] 
    public ActionResult Index_Get(SessionHelper arg) 
    { 

     pageload(); 
     if (Request["hid"] != null) 
     { 
      mysession.HotelID = Request["hid"]; 
     } 
     else 
     { 
      mysession.HotelID = mysession.HotelID; 
    //if HotelID==null i want to get the value to querystring i do it like this but did not worked 
     } 
     if (Request["Culture"] != null) 
     { 
      mysession.Culture = Request["Culture"]; 
     } 
     else 
     { 
      mysession.Culture = mysession.Culture; 
    //if Culture ==null i want to get the value to querystring i do it like this but did not worked 
     } 
     return View(mysession); 
     } 
    } 

Le routage pour cette méthode ressemble à ceci:

 routes.MapRoute(
      "OpenCase", 
      "IBE/hid={hid}", 
      new { controller = "Home", action = "Index" } 
     ); 

Je classe session assistant cette classe i utilisé pour définir des valeurs par défaut et stocker les valeurs modifiées pour les paramètres de chaîne de requête si leur est pas valeur passée:

public class SessionHelper 
{ 
    public SessionHelper() 
    { 
     // ------ Set default values here 
     Rate = ""; 
     HotelID = string.Empty; 
     CSS_FileName = "default.css"; 
     Culture = "En";   
     Checkin = DateTime.Today.Date; 
     Checkout = DateTime.Today.Date.AddDays(1); 
     //Maximum numbers 
     MaximumNumberOfRooms = 4; 
     MaximumNumberOfAdultsPerRoom = 4; 
     MaximumNumberOfChildrenPerRoom = 3; 
     MaximumDaysAheadBookable = 450; 
     MaximumDaysBetweenCheckinCheckout = 31; 

    } 


    #region String properties 
    public string Rate 
    { 
     get { return HttpContext.Current.Session["Rate"] as string; } 

     set { HttpContext.Current.Session["Rate"] = value; } 
    } 

    public string CSS_FileName 
    { 
     get { return HttpContext.Current.Session["CSS_FileName"] as string; } 
     set { HttpContext.Current.Session["CSS_FileName"] = value; } 
    } 
    public string Culture 
    { 
     get { return HttpContext.Current.Session["Culture"] as string; } 
     set { HttpContext.Current.Session["Culture"] = value; } 
    } 

    #endregion 

    #region Integer properties 
    public string HotelID 
    { 
     get { return (string)(HttpContext.Current.Session["HotelID"]); } 
     set { HttpContext.Current.Session["HotelID"] = value; } 
    }    

    //Maximum numbers defaulot value 
    public int MaximumNumberOfRooms 
    { 
     get { return (int)(HttpContext.Current.Session["MaximumNumberOfRooms"]); } 
     set { HttpContext.Current.Session["MaximumNumberOfRooms"] = value; } 
    } 

    public int MaximumNumberOfAdultsPerRoom 
    { 
     get { return (int)(HttpContext.Current.Session["MaximumNumberOfAdultsPerRoom"]); } 
     set { HttpContext.Current.Session["MaximumNumberOfAdultsPerRoom"] = value; } 
    } 

    public int MaximumNumberOfChildrenPerRoom 
    { 
     get { return (int)(HttpContext.Current.Session["MaximumNumberOfChildrenPerRoom"]); } 
     set { HttpContext.Current.Session["MaximumNumberOfChildrenPerRoom"] = value; } 
    } 

    public int MaximumDaysAheadBookable 
    { 
     get { return (int)(HttpContext.Current.Session["MaximumDaysAheadBookable"]); } 
     set { HttpContext.Current.Session["MaximumDaysAheadBookable"] = value; } 
    } 

    public int MaximumDaysBetweenCheckinCheckout 
    { 
     get { return (int)(HttpContext.Current.Session["MaximumDaysBetweenCheckinCheckout"]); } 
     set { HttpContext.Current.Session["MaximumDaysBetweenCheckinCheckout"] = value; } 
    } 



    #endregion 

    #region Date properties 
    public DateTime Checkin 
    { 
     get { return (DateTime)(HttpContext.Current.Session["Checkin"]); } 
     set { HttpContext.Current.Session["Checkin"] = value; } 
    } 

    public DateTime Checkout 
    { 
     get { return (DateTime)(HttpContext.Current.Session["Checkout"]); } 
     set { HttpContext.Current.Session["Checkout"] = value; } 
    } 

    #endregion 

L'utilisateur utilisera l'URL suivante:

http://localhost:51518/IBE/hid=100?Culture=Fr&Rate=ibe 

Cependant, je voudrais changer les valeurs des paramètres de chaîne de requête si l'utilisateur n'a pas passé des valeurs pour le paramètre de chaîne de requête de la requête string Ens la les valeurs par défaut vient par exemple si l'utilisateur obtenir l'URL comme ceci: http://localhost:51518/IBE/hid=?Culture=&Rate= sans valeurs que je veux obtenir les valeurs par défaut de mysession classe

+0

Vous pouvez écrire un middleware qui gère ces paramètres et le placer dans le ViewBag, afin que le contrôleur ne doive pas s'en soucier – Victor

Répondre

1

Eh bien, d'abord, ce n'est pas comment vous définissez des valeurs par défaut. Les valeurs définies dans le constructeur ne s'appliqueront que si la classe n'est pas initialisée avec des valeurs différentes. Votre problème ici est que le classeur du modèle va en effet initialiser cette classe avec des valeurs nulles, annulant effectivement ce que vous faites dans le constructeur.

La bonne façon de définir une valeur par défaut pour une propriété est un getter personnalisé et poseur:

private string culture; 
public string Culture 
{ 
    get { return culture ?? "En"; } 
    set { culture = value; } 
} 

Ou, si vous pouvez utiliser C# 6+:

public string Culture { get; set; } = "En"; 

Ce code a le même effet que le précédent, mais est évidemment beaucoup plus facile. De toute façon, le point ici est que la propriété retournera le "En" par défaut, chaque fois qu'il n'est pas défini (c'est-à-dire null). Ensuite, même si votre classe est initialisée avec des valeurs nulles, les valeurs par défaut seront toujours retournées.

En outre, une ligne comme celle-ci est inutile:

mysession.HotelID = mysession.HotelID; 

vous configurez la variable à la valeur actuelle de la variable, ce qui ne fait aucun sens. Il a déjà valeur. En supposant que vous implémentez correctement vos valeurs par défaut comme décrit ci-dessus, vous allez juste vous débarrasser de toutes vos conditions else.