C# 如何在asp.net mvc中更新查询字符串

C# 如何在asp.net mvc中更新查询字符串,c#,asp.net-mvc,asp.net-mvc-5,routing,query-string,C#,Asp.net Mvc,Asp.net Mvc 5,Routing,Query String,我在ASP.NET MVC中有一个控制器方法,如下所示: public class HomeController : Controller { SessionHelper mysession = new SessionHelper(); [HttpGet] [ActionName("Index")] public ActionResult Index_Get(SessionHelper arg) { pageload();

我在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);
      }
   }
     routes.MapRoute(
            "OpenCase",
            "IBE/hid={hid}",
            new { controller = "Home", action = "Index" }
        );
此方法的路由如下所示:

   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);
      }
   }
     routes.MapRoute(
            "OpenCase",
            "IBE/hid={hid}",
            new { controller = "Home", action = "Index" }
        );
我有session helper类该类用于设置默认值,并存储查询字符串参数的更改值(如果没有传递值):

 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
用户将使用以下URL:

  http://localhost:51518/IBE/hid=100?Culture=Fr&Rate=ibe
但是,如果用户没有传递查询字符串参数的值,我想更改查询字符串参数值。例如,如果用户获得如下url,则查询字符串将设置默认值:
http://localhost:51518/IBE/hid=?Culture=&Rate=
没有任何值我想从
mysession
class

中获取默认值首先,这不是设置默认值的方式。构造函数中设置的值仅在类未使用不同的值初始化时应用。这里的问题是,模型绑定器确实会用空值初始化这个类,有效地否定了您在构造函数中所做的操作

为属性设置默认值的正确方法是使用自定义getter和setter:

private string culture;
public string Culture
{
    get { return culture ?? "En"; }
    set { culture = value; }
}
或者,如果你能利用C#6+:

该代码与前面的代码具有相同的效果,但显然要容易得多。无论哪种方式,这里的要点是,每当属性未设置(即null)时,它都将返回默认的“En”。然后,即使您的类是用空值初始化的,默认值仍然会返回

此外,下面这样的行是没有意义的:

mysession.HotelID = mysession.HotelID;

您将变量设置为变量的当前值,这毫无意义。它已经有了这个价值。假设您如上所述正确地实现了默认值,那么您就可以摆脱所有的
其他
条件。

您可以编写一个中间件来处理这些参数并将其放在ViewBag中,这样控制器就不必担心了