1

ViewModelが関連付けられているビューでDatePickerを操作しています。ポストアクションを実行してコントローラーに戻すと、ViewModelが再度インスタンス化され、一部の値がビューから使用できなくなります。

コントローラのアクションは次のとおりです。

    public ActionResult Search()
    {
        ProjectSearchViewModel viewModel = 
            new ProjectSearchViewModel(
                DateTime.Today.AddMonths(-1), 
                DateTime.Today.AddDays(1));

        return View(viewModel);
    }

  [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Search(ProjectSearchViewModel viewModel)
    {
        try
        {
            //Always returns a value from UI
            DateTime startDate = viewModel.StartDate; 
            //NEVER returns a Value from UI
            DateTime endDate = viewModel.EndDate; 

....。

ビューのマークアップは次のとおりです。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/TabbedViewMasterPage.master" Inherits="System.Web.Mvc.ViewPage<Reactivity.Web.Models.ProjectSearchViewModel>"%>

..。

 <label for="StartDate">
        Start Date:
    </label>
    <% Html.jQuery().DatePicker()
            .Name("StartDate")
            .AllowMonthChange(true)
            .AllowYearChange(true)
            .ShowOn(DatePickerShowOn.Focus)
            .ShowOtherMonths(true)
            .Value(ViewData.Model.StartDate)
            .Render(); %>
    <br />
    <label for="EndDate">
        End Date:
    </label>
    <% Html.jQuery().DatePicker()
            .Name("EndDate")
            .AllowMonthChange(true)
            .AllowYearChange(true)
            .ShowOn(DatePickerShowOn.Focus)
            .ShowOtherMonths(true)
            .Value(ViewData.Model.EndDate)
            .Render(); %>
    <br />
    <input type="submit" value="Search" />

DatePicker(ビュー上の2つのインスタンス)は正常に機能します。

ViewModelフィールド(viewModel.EndDate)がコントローラーアクションに入力されて返されるようにするにはどうすればよいですか?または、これはフォームに2つの(MVC)DatePickersがある場合の問題ですか?

ブライアンに感謝します

4

1 に答える 1

1

わかりました、ここには2つの問題があります。

  1. 私はMVCなどに不慣れで、Telerik MVC Extensionsをプロジェクトに組み込んでいました。これは、jQueryの人が上記のコードがTelerikCTPであることを知っているはずです。申し訳ありません。

  2. 結局のところ、この問題はかなり興味深いものでした。上記のコードは日付のローカリゼーションを正しく処理していなかったため、ブラウザのローカリゼーションが非米国英語に設定された日付ピッカーに入力された日付は、2009年7月28日(正しいen-UK形式)を選択したときに米国形式として処理されていました。 )datepickerコントロールのTelerikラッパーがそれを通過しないか、パイプライン内の何かがそれを拒否していました。その結果、その月の12日を超える日付は返されませんでした。

これが途中で他の誰かに役立つことを願っています。

ブライアン

于 2009-08-28T18:41:20.687 に答える