1

フォーム モデル クラスによってバインドされたテキスト ボックス データを含む MVC Ajax フォームがあります。このクラスには、次のフィールドがあります。

    [Required(ErrorMessage = "First name must be filled")]
    public string FirstName { get; set; }

    [Required(AllowEmptyStrings = false,ErrorMessage = "Last Name must be filled")]
    public string LastName { get; set; }

    [DataType(DataType.EmailAddress)]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Email must be filled")]
    public string Email { get; set; }

3 つのフィールドはすべてバインドされて@Html.EditorFor(p=>p.FirstName/LastName/Email)いるため、これは非常に単純なはずです。

すべてが正常に機能しますが、フォームが投稿されると、電子メール フィールドは常に null になります。私はそれを (...) に置き換えようとしましたが、それ<input type="email"も null です。

type="email"したがって、フォーム メンバーに がある場合、値は null であるという結論になります。

誰かが理由を知っていますか、そしてもっと重要なのは、それを解決する方法ですか? (ちなみにこれはasp.mvc4です)

編集:これが私の見解です:

<div id="result"></div>
                @using (Ajax.BeginForm("FormTest", new AjaxOptions() {HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "result"}))
                {
                    {
                        Html.EnableClientValidation(true);
                    }
                    @Html.ValidationSummary(false)


                    @Html.LabelFor(p => p.EventForm.FirstName)
                    @Html.EditorFor(p => p.EventForm.FirstName)
                    @Html.LabelFor(p => p.EventForm.LastName)
                    @Html.EditorFor(p => p.EventForm.LastName)
                    @Html.LabelFor(p => p.EventForm.PhoneNumber)
                    @Html.EditorFor(p => p.EventForm.PhoneNumber)
                    @Html.LabelFor(p => p.EventForm.Email)
                    @Html.EditorFor(p => p.EventForm.Email)



                    @Html.LabelFor(p => p.EventForm.CompanyName)
                    @Html.EditorFor(p => p.EventForm.CompanyName)
                    @Html.LabelFor(p => p.EventForm.Adress)
                    @Html.EditorFor(p => p.EventForm.Adress)
                    @Html.LabelFor(p => p.EventForm.Zip)
                    @Html.EditorFor(p => p.EventForm.Zip)
                    @Html.LabelFor(p => p.EventForm.PostalCity)
                    @Html.EditorFor(p => p.EventForm.PostalCity)
                    @Html.LabelFor(p => p.EventForm.Country)
                    @Html.EditorFor(p => p.EventForm.Country)
                    @Html.LabelFor(p => p.EventForm.Comment)
                    @Html.EditorFor(p => p.EventForm.Comment)
                }

そして私のコントローラアクション:

        [HttpPost]
        public PartialViewResult Index(EventViewModel form)
        {
            StoreEventRegistration(form.EventForm);

            return PartialView("PagePartial/FormSubmit", form.EventForm);
        }

おそらくご存じのとおり、モデル全体を追加したわけではありませんが、残りのフィールドは上記と同じ方法で作成されます。

4

1 に答える 1

0

次のようにビューでフォームを設定していますか?

using (Ajax.BeginForm(...))
{

}   

そうしないと、特定のブラウザーを使用しているときにフォームがコントローラーにポストバックされます (先週、IE7/8 でこの正確な問題に遭遇したと思います - このファイルを追加すると修正されます)。

<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

アップデート:

コントローラーまたは web.config レベルで次の設定があることを確認してください。

ClientValidationEnbled=true
UnobstrusiveJavaScriptEnabled=true

そして、すべての可動部分が機能するためには、これらの js ファイルをすべて含める必要があることを理解しています。

<script src="@Url.Content("~/<your-path>/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/<your-path>/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
于 2013-05-29T11:02:56.277 に答える