1

DataTime 選択を含む、いくつかの編集可能なフィールドを持つフォームを備えた標準の asp.net mvc 4 ビューがあります。フォームがコントローラーにポストバックされると、有効な日付がクライアントに正常に送信されるか、クライアントで選択されても、DateTime は常に DateTime 1/1/0001 の最小値として表示されます。

DefaultModelBinding がこれを台無しにしていると推測していますが、その理由や方法はわかりません。私の web.config には、グローバリゼーションのために次のものがあります。

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto"/>

投稿を受け取るコントローラーの ActionResult は次のとおりです。

[HttpPost]
public virtual ActionResult Edit(KBUser kbuser)
{
    if (this.ModelState.IsValid)
    {
        //save the user
        m_userRepo.UpdateUser(kbuser);


        return RedirectToAction(MVC.Users.Index());

    }
    else
    {
        return View(kbuser);
    }

}

ビューの関連部分は次のとおりです。

@model KBMaxLive.Domain.KBUser

@using (Html.BeginForm("Edit", "User", new { idUser = Request["idUser"] }, FormMethod.Post, new { id = "form" }))
    { 
        <fieldset>
            <legend>@Engine.Resources.KBMaxLive.Account</legend>

             <div class="field-column-container">
                <div class="field-column">
                    <div class="field-container">
                        @Html.LabelFor(u => u.CreatedDate)
                        @Html.TextBoxFor(u => u.CreatedDate, new { @class = "k-textbox", @readonly = "readonly" }) 
                        @Html.ValidationMessageFor(u => u.CreatedDate)
                    </div>
                </div>
            </div>
        </fieldset>
    }

日時を除いて、モデルのすべてのプロパティは正常に機能します。
何がうまくいかないのか、またはこれをデバッグする方法についてのアイデアはありますか?

4

1 に答える 1

0

既定のモデル バインダーは、POST 要求の日時を解析するときに現在のカルチャを使用します。web.config のスニペットから、使用しているように見えますauto。これは、現在のカルチャがクライアント ブラウザーの設定によって決定されることを意味します。たとえば、Google Chrome では、言語のリストとその優先順位を構成できます。ブラウザは、Accept-Languageリクエストごとにヘッダーを送信します。

例えば:

Accept-Language:en-US,en;q=0.8

ASP.NET MVC は、この言語を使用して要求のカルチャを設定します。これは、モデル バインダーが、日時がこの言語用に定義された形式で入力されることを期待することを意味します。そのためen-USにはMM/dd/yyyy. 別の優先言語を使用するようにブラウザーを構成している場合、ユーザーはこの優先設定に従って日時を入力する必要があります。

一方、クライアント ブラウザーの構成に関係なく、すべての日付を特定の形式にしたい場合は、カスタム モデル バインダーを作成できます。たとえば、対応するビュー モデル プロパティの属性this answerを使用してこれを行う方法を示しました。DisplayFormat

于 2012-10-15T06:35:18.620 に答える