1

クライアント側の検証とValidationSummaryは私のプロジェクト(MVC4 + Razor + Unobtrusive JS)で正常に機能していますが、サーバー側のエラーはビューに表示されず、クライアント側のエラーがあった場合、ビューから削除されません( ModelStateから)。Chrome14とIE9の両方で試しました

サーバー側のエラーは、としてモデルに追加されModelState.AddModelError(string.Empty, ModelState.AllErrors());、ビューにとして表示され@Html.ValidationSummary(false)ます。

編集

単純なフォーム送信は正常に機能しており、サーバーから返された複数のエラーメッセージが表示され、エラーメッセージが更新されますが、ajaxベースのフォーム送信が機能していません。ajaxベースのフォーム送信によって返されたエラーメッセージはまったく表示されません。

これは、リクエストがどのように行われるかのサンプルデモンストレーションです

    @*... View contents related to Master Model  ...*@
    @using (Ajax.BeginForm("ActionToAddRecord", new AjaxOptions()))
    {
        @Html.Action("ActionToAddRecord")
        <input type="submit" value="Add Record"/>
    }
    @*... View contents related to Master Model  ...*@

ActionToAddRecordは、マスターモデルに含まれるモデルを表す部分ビューです。

エラーは次のように返されます

[HttpGet]
public ActionResult ActionToAddRecord()
{
    return View();
}

[HttpPost]
public ActionResult ActionToAddRecord(childModel model)
{
    ModelState.AddModelError(string.Empty, "First error message");
    ModelState.AddModelError(string.Empty, "Second error message");
    return View(model);
}

編集

VS2010によるテンプレート化されたMVCアプリケーション、ダイアログベースのログインフォームでも同様の機能が見られました。エラーメッセージはJsonとして返され、JSを使用して表示されます。IMOは、MSがAjaxベースのリクエストを非常に簡単かつ簡潔に作成したようです(Ajax.BeginForm)が、エラー処理の部分がありません。今のところ、これにJSを使用するつもりはありません。このタイプのエラー処理を自動的に処理するための、より良い方法があるかもしれません。

4

1 に答える 1

0

小さなエラーで解決しました。

マスタービュー

@*Master View Contents*@
        @using (Ajax.BeginForm("AddPaymentCurrency", new AjaxOptions { UpdateTargetId = "paymentCurrency" }))
        {
            <div id="paymentCurrency"> 
                @{Html.RenderPartial("PaymentCurrency", Model.PaymentCurrencyNew);}
            </div>
        }

PaymentCurrencyビュー

@*Model Editors*@
@Html.ValidationSummary(false)
<input type="submit" value="Add Payment Currency"/>

<div id="paymentCurrencyList" style="width:inherit; height:auto; overflow:auto;"> 
    @Html.Action("PaymentCurrencyList")
</div>

コントローラ

[HttpPost]
public ActionResult AddPaymentCurrency(PaymentCurrency model)
{
    if (!ModelState.IsValid)
    {
        ModelState.AddModelError(string.Empty, ModelState.AllErrors());
        return View("PaymentCurrency", model);
    }
    //Add login
    return View("PaymentCurrency", model);
}

public ActionResult PaymentCurrencyList()
{
    //var list = getList
    return View(list);
}

小さなエラー

ValidationSummaryは、無効な支払い通貨を追加している間、フィールドが強調表示され、それらに対してアスタリスクが表示されて表示されます。有効な通貨が追加されると、ValidationSummaryとアスタリスクは無効な支払い通貨に表示されなくなり、フィールドのみが強調表示されます。

私がそれを修正するのを手伝ってください、私は現在の構造を変更したくないです、さもなければ私は大きなエラーを起こし始めます

于 2012-03-27T13:41:31.907 に答える