C# 如何在asp.net mvc中更新查询字符串
我在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();
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中,这样控制器就不必担心了