用于用户名和日期的asp.net mvc模型绑定
本文关键字:net mvc 模型 绑定 asp 用户 日期 用于 | 更新日期: 2023-09-27 17:57:41
我的项目中有一个日志控制器,它从javascript客户端获取日志数据并发送到服务器。
日志模型是这样的。
public class Log
{
public string Event { get; set; }
public string Message { get; set; }
public DateTime Date { get; set; }
public string Username { get; set; }
}
我的控制器动作是这样的。
[HttpPost]
public JsonResult Save(Log log)
{
log.Username = User.Identity.Name;
log.Date = DateTime.now;
return Json(new { message = "ok" }, JsonRequestBehavior.AllowGet);
}
当用户发送日志数据时,我需要设置用户名和日期。模型绑定还有其他方法吗?自动设置日志的context.username和日期时间。
IModelBinder
是首选方式。您实现接口并将其注册在Global.asax文件中
ModelBinders.Binders.Add(typeof(Log), new LogModelBinder());
我不喜欢这种方法的地方在于,你必须意识到,在某个地方实现了一个用于这种类型的自定义模型绑定器,如果你忘记了它,或者你有一个新的开发人员在处理这个项目,而模型开始表现得很奇怪,它可能会引起混乱。只是还不够清楚是什么在改变这个物体。
我喜欢在控制器中实现所有自定义逻辑。您可以覆盖OnActionExecuting
并在那里注入属性,更好的是,拥有一个所有控制器都继承的BaseController
,并在其中执行自定义逻辑。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
object model = filterContext.ActionParameters
.TryGetValue("model", out model)
? model : null;
if (model != null)
{
var logModel = model as Log;
if (logModel != null)
{
logModel.Date = DateTime.Now;
logModel.Username = filterContext.HttpContext.User.Identity.Name;
}
}
}