簡體   English   中英

日期時間格式回傳無效的ModelState

[英]Datetime format postback invalid ModelState

在回發驗證期間,在Datetime屬性上使用DisplayFormat屬性時遇到問題。

明確地說,這不是主要問題,但我想了解一種使其不被“黑客”攻擊或僅對此進行討論(在這種情況下為“正常”行為)的方法。

讓我們承認我在數據庫中有一些日期時間(例如2014年10月17日12:00:00 AM)以表格形式顯示。 我正在使用DataType(Datatype.Date)DisplayFormat(...)屬性,但是當我發回表單時,由於Datetime格式,我得到ModelState無效。

--MyModel類文件(.cs)

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
    }
}

--cshtml文件

  @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>
}

--controller文件(.cs)

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM