2017-10-31 19 views
0

を結合私はモデルがあります:asp.netコア2 - カスタムモデルは、特定のフィールドの

public class ChartFilter 
{ 
    [Required(ErrorMessage = "Tiene que especificar una fecha")] 
    [DataType(DataType.DateTime, ErrorMessage = "La fecha es invalido")] 
    [Display(Name = "Fecha desde")] 
    public DateTime dateFrom { get; set; } 

    [Required(ErrorMessage = "Tiene que especificar una fecha")] 
    [DataType(DataType.DateTime, ErrorMessage = "La fecha es invalido")] 
    [Display(Name = "Fecha hasta")] 
    public DateTime dateTo { get; set; } 
} 

マイハンドラ/アクション:

public void OnGetFilter([FromQuery(Name = "ChartFilterForForm")]ChartFilter chartFilter) { 
     if (ModelState.IsValid) 
     { 
      initComprobantes(chartFilter); 
     } 
     else { 
      initComprobantes(); 
     } 
    } 

マイ形式:

<form name="filter" class="form-horizontal"> 
     <div asp-validation-summary="All"></div> 
     <div class="form-group"> 
      <label class="col-lg-1" asp-for="ChartFilterForForm.dateFrom"></label> 

      <div class="col-lg-4"> 
       <input class="form-control" asp-format="{0:d \de MMMM \de yyyy}" asp-for="ChartFilterForForm.dateFrom" /> 
      </div> 

      <label class="col-lg-offset-2 col-lg-1" asp-for="ChartFilterForForm.dateTo"></label> 

      <div class="col-lg-4"> 
       <input type="datetime" class="form-control" asp-format="{0:d \de MMMM \de yyyy}" asp-for="ChartFilterForForm.dateTo" /> 
      </div> 
     </div> 

     <div class="form-group" style="margin-top: 30px"> 
      <input asp-page-handler="Filter" class="btn btn-default btn-block" type="submit" value="Filtrar" /> 
     </div> 
    </form> 

問題は、aspは私が送った日付でモデルを自動的に検証できないということです。それは私にエラーThe value '4 de eneror de 2017' is not valid for Fecha desde.を与えました。

私はカスタムバインディングを試しました。しかし、カスタムバインディングを使用するには、そこから手動でフィールド値を設定する必要がありますenter link description here。しかし、私はちょうど日付の値を設定したいです。

ロケールの設定に関する多くの記事や記事がウェブ上に表示されています。しかし、私の問題はローカルではありません。例えば、私は自分の日付形式を2017年1月またはmonday 1月2017年のように使用しているからです。たとえば、Symfonyを使用します。フレームワークがフォームを検証する前に、コントローラのフォーム値を変更できます。それはasp.netコアでやりたいことです。

DateTimeフィールドのみでこれを行うにはどうすればよいですか?

+0

リンクが404を返しています。 –

+0

私はen-usの代わりにローカルen-enにリンクを設定しました。今は大丈夫です。 – user3502626

答えて

0

異なる言語形式のため、C#DateTimeはあなたのフォーマットを自動的に解析できないと思います。ブラウザの言語設定が正しい場合、入力フォームは自動的にフォーマットを変換する必要があります。しかし、あなたの例では、最初の日付入力にはtypeがありません。なぜなら、それは解析しようとしていないかもしれない理由かもしれません。

入力タイプが新しいdateです。これは、time要素を削除します。これを使用すると、文字列を入力するのではなく、日付ピッカーが表示されます。

+0

'date'入力タイプはFirefoxでは動作しません。私は、日付ピッカーのjQuery UIを使用します。しかし、これは問題ではありません。ロケールを設定する人々が話している多くの記事や記事がウェブ上に表示されています。しかし、私の問題はローカルではありません。例えば、私は自分の日付形式を2017年1月またはmonday 1月2017年のように使用しているからです。たとえば、Symfonyを使用します。フレームワークがフォームを検証する前に、コントローラのフォーム値を変更できます。それはasp.netコアでやりたいことです。 – user3502626

+0

どちらの日付入力でもエラーが発生するので、HTMLの日付入力タイプではありません。そのフォーマットを使用する: '2017/1/25'仕事 – user3502626

+0

私の言ったように、私は自分のフォームが巨大になるので、手動でやりたいとは思わない。私は私のためにそれをするasp.netを好む。しかし、もし私が手動で行っていたら、そのコードはこのトリックを行います: 'dateTime = DateTime.ParseExact(" 2017年1月25日水曜日 "、" dddd d MMMM \\ o \\ f yyyy "、null);私のDateTimeフィールドでのみそれを行うことができるようにする。 – user3502626

関連する問題