0

私はモデルのプロパティを持っています

 public DateTime SelectedDate { get; set; }
 public DateTime SelectedDateTo { get; set; }

ビューには

<input id="Testdate-Field" type="text"  style="width: 125px;" value="@Html.DisplayTextFor(m=>m.SelectedDate)" /> To
   <input id="TestdateTo-Field" type="text"  style="width: 125px;" value="@Html.DisplayTextFor(m=>m.SelectedDateTo)" />

私が持っているビューでカレンダーを表示するには

  $("#Testdate-Field").bind("click", function(event) {       
     $( "#Testdate-Field").datepicker();
    });    

      $("#TestdateTo-Field").bind("click", function(event) {       
     $( "#TestdateTo-Field").datepicker();
    });    

今、2つの問題

  1. 入力ボックスを初めてクリックすると、別の場所をクリックしてから日付の入力ボックスをクリックするまでカレンダーが表示されません。
  2. カレンダーから日付を選択すると、モデル プロパティの SelectedDate と SelectedDateTo は変更されず、読み取り時にデフォルト値のままになります。入力日付を読み取るにはどうすればよいですか?

---更新--- 提案に従って、これを準備完了に追加しました

 $("#Testdate-Field").datepicker();
 $("#TestdateTo-Field").datepicker();

そして最初の問題は解決しました!datefield で選択したものをモデル プロパティにバインドするにはどうすればよいですか?

4

1 に答える 1

1

質問 1 については、bind イベントに .datepicker() コードを配置しないでください。ドキュメントの準備ができたら、それらを実行するだけです。

<script>
    jQuery(document).ready(function ($) {
        $( "#Testdate-Field").datepicker();
        $( "#TestdateTo-Field").datepicker();
    });
</script>

2 番目の質問では、Html ヘルパーを使用して入力を生成し、コントローラーで簡単にバインドできます。生成する入力タグ内で DisplayTextFor を使用する代わりに、TextBoxFor を使用して入力タグを生成します。

ビューモデル:

public class SampleViewModel
{
    // other properties here
    public DateTime SelectedDate { get; set; }
    public DateTime SelectedDateTo { get; set; }
    // other properties here
}

意見:

@model SampleClassViewModel
@using(Html.BeginForm())
{
    @Html.TextBoxFor(m => m.SelectedDate, new { class = "datepickers" })
    @Html.TextBoxFor(m => m.SelectedDateTo, new { class = "datepickers" })
    <input type="submit" />
}
<script>
    jQuery(document).ready(function ($) {
        $( ".datepickers").datepicker();
    });
</script>

プロパティをバインドするには多くの方法がありますが、ここにいくつかあります... コントローラーオプション 1:

[HttpPost]
public ActionResult SomeControllerAction(SampleViewModel model)
{
    // do work...
}

コントローラ オプション 2:

[HttpPost]
public ActionResult SomeControllerAction()
{
    var model = SomeServiceMethodToBuildModel();
    this.TryUpdateModel(model);
    // do work...
}

ありがとう!

于 2013-01-21T11:06:20.310 に答える