0

サーバー側で検証されたページがあります。サーバーの検証に失敗すると、データが入力されたフォームの上に検証エラーのあるボックスが表示され、同じページが表示されます。

私の問題は、ページの上部に他のものがたくさんあるので、ユーザーがエラーボックスに誘導されず、実際には画面外にある可能性があることです。エラーはdiv#server_errorsにあります。私が欲しいのは、ビューを返すようにコントローラーに指示することですが、URLに#server_errorsを追加するのと同じように、エラーセクションにジャンプします。

コントローラは次のように戻ります。

public ActionResult ChangeRiskCategory(Guid id)
{
    //...
    //call server side method,  handle errors
    //...
    return View("ChangeRiskCategory", changeRiskCategoryModel);
}

この時点では、dividをビューに挿入する方法がわかりません。クライアント側を検証することでこの問題を解決できることがわかりますが、jsを有効にせずに動作する必要があるため、それは除外されると思います。

4

3 に答える 3

1

ViewModelのプロパティとしてdividをビューに渡すのはどうですか?次に、ビューのJavascriptで好きなことを行うことができます。結局のところ、ViewModelはビューのデータと状態を表します。

于 2012-04-16T14:09:34.410 に答える
1

あなたはこのようなことを試すことができます:

public ActionResult ChangeRiskCategory(Guid id, bool error = false)
{
    //...
    //call server side method,  handle errors
    //...
    if (!error && !ModelState.IsValid /*or other way of working out the error will be displayed*/)
    {
        return Redirect(Url.Action("ChangeRiskCategory") + "?id=" + id + "&error=true#server_error");
    }
    return View("ChangeRiskCategory", changeRiskCategoryModel);

}

(「エラー」パラメータは、リダイレクトを際限なく停止することです)

javascriptの使用について気が変わった場合は、単純に次のように出力できます。

location.href='#server_errors';
于 2012-04-18T14:52:32.547 に答える
0

モデルベースの検証を使用して、次のように表示しますか

@model SampleApplication.Models.BasicDemoModel

<form id="AjaxForm" action="/">
    <table>
        <tr>
            <td>@Html.LabelFor(x => x.Name)</td>
            <td>
                @Html.TextBoxFor(x => x.Name)
                @Html.ValidationMessageFor(x => x.Name, "*")
            </td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.Email)</td>
            <td>
                @Html.TextBoxFor(x => x.Email)
                @Html.ValidationMessageFor(x => x.Email, "*")
            </td>
        </tr>
        @{
            Html.RenderPartial("Address", Model);
        }
    </table>
    @if (!string.IsNullOrWhiteSpace(Model.Message))
    {
        <h2>@Model.Message</h2>
    }
    @if (!ViewContext.ViewData.ModelState.IsValid)
    {
        @Html.ValidationSummary()
    }
    <input type="submit" title="Submit Form" onclick="PostFormWithAjax();return false;" />
</form>

追加の検証メッセージが必要な場合は、このような状態に追加するだけです。

public ActionResult ChangeRiskCategory(Guid id)
{
    //...
    //call server side method,  handle errors
    //...
    ModelState.AddModelError("MyInput","This isn't Right");
    return View("ChangeRiskCategory", changeRiskCategoryModel);
 }
于 2012-04-16T14:35:13.210 に答える