asp.net mvc에서 날짜 시간 값을 URI 매개 변수로 어떻게 전달합니까?
datetime 값이있는 작업 매개 변수가 필요합니까? 이를 수행하는 표준 방법이 있습니까? 다음과 같은 것이 필요합니다.
mysite/Controller/Action/21-9-2009 10:20
그러나 나는 다음과 같은 것을 통해서만 성공하고 있습니다.
mysite/Controller/Action/200909211020
이 형식을 처리하기 위해 custome 함수를 작성합니다.
다시 말하지만, 표준 또는 승인 된 ASP.net MVC 방법을 찾으십시오.
첫 번째 예의 URL에있는 콜론은 오류 (잘못된 요청)를 발생시켜 원하는 것을 정확히 수행 할 수 없습니다. 그 외에는 DateTime을 작업 매개 변수로 사용하는 것이 가장 확실합니다.
기본 라우팅을 사용하는 경우 예제 URL의이 세 번째 부분은 DateTime 값을 {id} 매개 변수로 선택합니다. 따라서 Action 메서드는 다음과 같습니다.
public ActionResult Index(DateTime? id)
{
return View();
}
내가 가지고있는 것처럼 Nullable Datetime을 사용하고 싶을 것이므로이 매개 변수가 포함되지 않은 경우 예외가 발생하지 않습니다. 물론, "id"라는 이름을 지정하지 않으려면 {id}를 선택한 이름으로 바꾸는 다른 경로 항목을 추가하십시오.
URL의 텍스트가 유효한 DateTime 값으로 구문 분석되는 한이 작업 만 수행하면됩니다. 다음과 같은 것이 잘 작동하며 오류없이 Action 메서드에서 선택됩니다.
<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>
물론이 경우에는 시간을 포함하지 않았다. 콜론으로 표시되지 않은 시간으로 (유효한) 날짜 문자열을 형식화하는 방법이 있는지 잘 모르겠습니다. 따라서 URL에 시간을 포함해야하는 경우 고유 한 형식을 사용하고 결과를 다시 구문 분석해야 할 수 있습니다. 수동으로 DateTime. 콜론을 "!"로 바꾼다고 가정 해 보겠습니다. actionlink에서 : new { id = DateTime.Now.ToString("dd-MM-yyyy HH!mm") }
.
귀하의 작업 방법은 이것을 날짜로 파싱하지 못 하므로이 경우 가장 좋은 방법은 아마도 문자열로 받아들이는 것입니다.
public ActionResult Index(string id)
{
DateTime myDate;
if (!string.IsNullOrEmpty(id))
{
myDate = DateTime.Parse(id.Replace("!", ":"));
}
return View();
}
편집 : 의견에서 언급했듯이 내 것보다 더 나은 다른 해결책이 있습니다. 이 답변을 처음 썼을 때 가능한 한 날짜 시간 형식의 본질을 보존하려고 노력했지만 URL 인코딩이 명확하게 처리하는 것이 더 적절한 방법이라고 생각합니다. Vlad의 댓글에 +1.
toISOString ()을 사용해보십시오. ISO8601 형식의 문자열을 반환합니다.
자바 스크립트에서
$.get('/example/doGet?date=' + new Date().toISOString(), function (result) {
console.log(result);
});
C #에서
[HttpGet]
public JsonResult DoGet(DateTime date)
{
return Json(date.ToString(), JsonRequestBehavior.AllowGet);
}
틱 값을 사용하십시오. DateTime 구조로 다시 빌드하는 것은 매우 간단합니다.
Int64 nTicks = DateTime.Now.Ticks;
....
DateTime dtTime = new DateTime(nTicks);
ASP .NET MVC에 대한 URI의 일반적인 형식은 Controller / Action / Id이며 여기서 Id는 정수입니다.
경로의 일부가 아닌 매개 변수로 날짜 값을 보내는 것이 좋습니다.
mysite/Controller/Action?date=21-9-2009 10:20
그래도 문제가 발생하는 경우 날짜에 URI에서 허용되지 않는 문자가 포함되어있을 수 있으며 인코딩해야합니다. 확인 :
encodeURIComponent(yourstring)
Javascript 내의 메소드입니다.
서버 측에서 :
public ActionResult ActionName(string date)
{
DateTime mydate;
DateTime.Tryparse(date, out mydate);
}
참고로, 이름이 동일하면 모든 url 매개 변수를 조치 메소드 매개 변수에 맵핑 할 수 있습니다.
나는 비슷한 대답을 찾는 모든 사람들을 위해 MVC5에서 나를 위해 일하는 것을 공유 할 것이라고 생각했습니다.
내 컨트롤러 서명은 다음과 같습니다.
public ActionResult Index(DateTime? EventDate, DateTime? EventTime)
{
}
내 ActionLink는 Razor에서 다음과 같이 보입니다.
@Url.Action("Index", "Book", new { EventDate = apptTime, EventTime = apptTime})
이것은 다음과 같은 URL을 제공합니다.
Book?EventDate=01%2F20%2F2016%2014%3A15%3A00&EventTime=01%2F20%2F2016%2014%3A15%3A00
Which encodes the date and time as it should.
Split out the Year, Month, Day Hours and Mins
routes.MapRoute(
"MyNewRoute",
"{controller}/{action}/{Year}/{Month}/{Days}/{Hours}/{Mins}",
new { controller="YourControllerName", action="YourActionName"}
);
Use a cascading If Statement to Build up the datetime from the parameters passed into the Action
' Build up the date from the passed url or use the current date
Dim tCurrentDate As DateTime = Nothing
If Year.HasValue Then
If Month.HasValue Then
If Day.HasValue Then
tCurrentDate = New Date(Year, Month, Day)
Else
tCurrentDate = New Date(Year, Month, 1)
End If
Else
tCurrentDate = New Date(Year, 1, 1)
End If
Else
tCurrentDate = StartOfThisWeek(Date.Now)
End If
(Apologies for the vb.net but you get the idea :P)
Since MVC 5 you can use the built in Attribute Routing package which supports a datetime
type, which will accept anything that can be parsed to a DateTime.
e.g.
[GET("Orders/{orderDate:datetime}")]
More info here.
i realize it works after adding a slash behind like so
mysite/Controller/Action/21-9-2009 10:20/
You should first add a new route in global.asax:
routes.MapRoute(
"MyNewRoute",
"{controller}/{action}/{date}",
new { controller="YourControllerName", action="YourActionName", date = "" }
);
The on your Controller:
public ActionResult MyActionName(DateTime date)
{
}
Remember to keep your default route at the bottom of the RegisterRoutes method. Be advised that the engine will try to cast whatever value you send in {date} as a DateTime example, so if it can't be casted then an exception will be thrown. If your date string contains spaces or : you could HTML.Encode them so the URL could be parsed correctly. If no, then you could have another DateTime representation.
ReferenceURL : https://stackoverflow.com/questions/1224201/how-do-i-pass-a-datetime-value-as-a-uri-parameter-in-asp-net-mvc
'IT story' 카테고리의 다른 글
Android의 Moshi 대 Gson (0) | 2020.12.25 |
---|---|
'bool'은 C ++의 기본 데이터 유형입니까? (0) | 2020.12.25 |
Postgres를 사용하여 테이블의 두 번째 또는 세 번째 열 뒤에 테이블에 새 열을 추가하는 방법은 무엇입니까? (0) | 2020.12.25 |
ANSI JOIN과 non-ANSI JOIN 쿼리가 다르게 수행됩니까? (0) | 2020.12.25 |
데이터 과학자의 필수 기술 (0) | 2020.12.25 |