gpt4 book ai didi

asp.net-mvc-3 - 如何在 MVC3 中为包含日期属性的 View 模型强制执行正确的全局化行为

转载 作者:行者123 更新时间:2023-12-04 05:43:01 27 4
gpt4 key购买 nike

我正在尝试将复杂的 View 模型传递给 Controller ​​操作。传递的对象是 Goal 类型,其中包含一个日期时间属性 (Goal.moddate)。在我的情况下,日期的字符串表示遵循 es-MX。因此,2012 年 2 月 29 日表示为“29/02/2012”(我对其他日期也有同样的问题)。

Controller Action 还使用 [CultureAwareAction] 属性进行注释 - 此属性根据用户偏好设置文化信息。在这种情况下(更新以使解决方案更清晰)

public class CultureAwareActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-MX");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-MX");
}
}

我处理该操作的首选方式如下:
    [HttpPost]
[CultureAwareAction]
[ValidateAntiForgeryToken]
public ActionResult Edit(Goal goal)
{
try
{
if (ModelState.IsValid)
{
{
...update logic ...
}
}
}
catch (DataException)
{
... error handling ....
}
return View();
}

使用此方法 ModelState.IsValid 由于未解析日期字符串而返回 false。将 Controller 操作更改为以下我没有遇到错误:
    [HttpPost]
[CultureAwareAction]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, FormCollection formcollection)
{
try
{
Goal goal = unitOfWork.GoalRepository.GetByID(id);

if (TryUpdateModel(goal,formcollection))
{
{
... update logic ....
}
}
}
catch (DataException)
{
... error handling ...
}
return View();
}

我的目标是在第一种情况下强制执行适当的全局化行为,因为这种方法具有显着优势。除非在使用 [CultureAwareAction] 属性设置用户首选文化之前发生模型绑定(bind),否则这似乎应该有效。

最佳答案

模型绑定(bind)器使用 CurrentCulture ,而不是 CurrentUICulture解析日期时。此外,您还没有显示此 CultureAwareAction 的代码但很可能它会执行 之后 模型绑定(bind),因此您设置文化为时已晚。

如果要确保它执行之前 模型绑定(bind)你可以实现 IAuthorizationFilter 界面:

public class CultureAwareActionAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
// That's for displaying in the UI, the model binder doesn't use it
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-MX");

// That's the important one for the model binder
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-MX");
}
}

关于asp.net-mvc-3 - 如何在 MVC3 中为包含日期属性的 View 模型强制执行正确的全局化行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022745/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com