![](/img/trans.png)
[英].NET Core DateTime? field ModelState is invalid if null
[英]Datetime format postback invalid ModelState
在回發驗證期間,在Datetime屬性上使用DisplayFormat屬性時遇到問題。
明確地說,這不是主要問題,但我想了解一種使其不被“黑客”攻擊或僅對此進行討論(在這種情況下為“正常”行為)的方法。
讓我們承認我在數據庫中有一些日期時間(例如2014年10月17日12:00:00 AM)以表格形式顯示。 我正在使用DataType(Datatype.Date)
和DisplayFormat(...)
屬性,但是當我發回表單時,由於Datetime格式,我得到ModelState無效。
namespace Package.To.Models {
public class MyModel
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0: dd/MM/yyyy}", ApplyFormatInEditMode = true]
public Datetime myDate { get; set; }
...other properties
}
}
@model Package.To.Models.MyModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.myDate)
</div>
<div class="editor-field">
<!-- displayed with the good format eg. 17/10/2014 -->
@Html.EditorFor(model => model.myDate)
</div>
<input type="submit" value="Ok" class="button"/>
</fieldset>
}
[HttpPost]
public ActionResult calledWhenSubmit(MyModel model)
{
// invalid model.myDate: 1/1/0001 12:00:00 AM
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
// errors.Errors[0].ErrorMessage: "The value '17/10/2014' is not valid for myDate"
// errors.Errors[0].Exception._COMPlusExceptionCode: -532462766
if (ModelState.IsValid) // returning false
{
...some code
}
return View();
}
看來,如果我刪除DisplayFormat(...)
屬性,則一切正常(除了所顯示的日期格式錯誤的事實)。
我在SO上找到了很多有關Datetime和ModelState問題的帖子,但在配置中卻一無所獲,就像我剛得到的一樣,所以我無所適從
我有同樣的問題。 盡管設置了DateFormatString
但控制器驗證不了解此格式,但它了解了區域性格式。 您需要通過添加以下代碼在Startup.cs
ConfigureServices方法中對其進行更改:
var cultureInfo = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.