簡體   English   中英

提交的日期時間轉換為“0001-01-01T00:00:00”

[英]Submitted datetime is converted to "0001-01-01T00:00:00"

在我的 Razor Pages .NET Core 3.1 應用程序中,我有以下簡單的形式

<form method="post" id="formReport">
  <div class="form-group">
    <label asp-for="Parameters.From" class="control-label"></label>
    <input id="txtFrom" asp-for="Parameters.From" type="text" class="form-control" style="width:90%;" />
  </div>
  <button type="submit" class="btn btn-primary btn-sm" title="Show report">
    <i class="far fa-eye"></i> Show Report
  </button>
</form>

txtForm是使用 DateTimePicker jQuery 插件( https://xdsoft.net/jqplugins/datetimepicker/ )實現的日期輸入字段。

var from = $('#txtFrom').datetimepicker({
            format: 'd/m/Y H:i',
            formatDate: 'Y/m/d',
            formatTime: 'H:i',
            defaultTime: '06:00',
            mask: '39/19/9999 29:59',
            monthChangeSpinner: true,
            onChangeDateTime: function (dp, $input) {
                console.log($input.val());
            }
       });

當我輸入日期為 13/02/2022 06:00 時,上面console.log中的13/02/2022 06:00是相同的: 13/02/2022 06:00 所以,我猜,這是通過 POST 提交的值。 但在服務器端,我得到"0001-01-01T00:00:00"

當從 Visual Studio 在調試模式下運行時,或者當我將其部署到本地 web 服務器時,該代碼工作正常。 但是,當使用 Docker 將應用程序部署到生產站點時,表單提交不起作用。 提交的值轉換為"0001-01-01T00:00:00"

這是我正在使用的Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:3.1-bionic-arm64v8 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:3.1-bionic-arm64v8 AS build
WORKDIR /src
COPY ["myApp.Web/myApp.Web.csproj", "myApp.Web/"]
RUN dotnet restore "myApp.Web/myApp.Web.csproj"
COPY . .
WORKDIR "/src/myApp.Web"
RUN dotnet build "myApp.Web.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myApp.Web.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# Create a folder for saving images; this folder exists in container filesystem
# and has to be mounted to folder of the host filesystem inside docker-compose
RUN mkdir -p /app/images

ENTRYPOINT ["dotnet", "myApp.Web.dll"]

由於某種原因,提交日期時,model 綁定程序未將其正確轉換為 DateTime 值。 有什么想法可以解決這個問題嗎?

@Heretic Monkey 的評論幫助我找到了解決問題的簡單方法。 我將表單視圖 model class 轉換為:

public class ReportFormViewModel
{
    public DateTime From { get; set; }
    public DateTime To { get; set; }       
}

至:

public class ReportFormViewModel
{
    public string From { get; set; }
    public string To { get; set; }

    public DateTime DateFrom
    {
        get
        {
            return DateTime.ParseExact(From, "dd/MM/yyyy HH:mm", 
                                         CultureInfo.InvariantCulture);
        }
    }

    public DateTime DateTo
    {
        get
        {
            return DateTime.ParseExact(To, "dd/MM/yyyy HH:mm",
                                         CultureInfo.InvariantCulture);
        }
    }

}

所以提交的值不會被 model binder 轉換為 DateTime。 相反,我使用客戶端日期格式顯式解析接收到的字符串。

只需重寫這個 model 就像:[Make nullable by using ? ]

public class ReportFormViewModel
{
    public DateTime? From { get; set; }
    public DateTime? To { get; set; }       
}

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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