1

現在、jquery モーダル ダイアログでサーバー側の検証を取得しようとしています。Ajaxでフォームを送信していますが、バリデーションが失敗した場合、ダイアログを表示してバリデーションエラーを指摘したいと考えています。

私はそれのほとんどを機能させていますが、私が抱えている問題は1つだけです。

フォームが送信され、コントローラーによって受信されています。ページにエラーがあることを認識し、ビューを再表示しようとします。送信されなかったフィールド、つまり一部のデータのみを表示するテーブルが必要なため、ビューを再表示できません。

私の質問は、モデル データを保持しているテーブルを送信するビューを取得するにはどうすればよいかということです。

明確にするために、これが起こっていることです:

1.モーダルダイアログの送信ボタンが押された

2.編集可能なフォームデータを送信する <---- 編集不可能なデータを送信したい

3.コントローラーがモデルを検証する

4.検証に失敗する

5.コントローラーはモデルをビューに返します

6.一部のデータが欠落しているため、ビューを表示できません

これは私が提出したい編集不可能なデータです

@foreach (var hour in Model.Hours)
{
   <tr>
        <td>@hour.CreatedBy</td>
        <td>@hour.WorkingStart</td>
        <td>@hour.HourComment</td>
        <td>@hour.SecondsUsed</td>
   </tr>
}

モデル:

public TaskEditAVwTask Task { get; set; }
public int numdays { get; set; }
public string firstday { get; set; }
public string lastday { get; set; }
public float taskhoursused { get; set; }

public List<TaskEditAVwHour> Hours { get; set; }

主な問題は、ビューがこのデータ自体を再表示する必要があることです。

検証が失敗したときにデータベースからデータをフェッチすることもできますが、これは最後の手段にする必要があると思います。

これがあまり明確でない場合は申し訳ありませんが、できるだけ明確にしようとしました。

4

3 に答える 3

1

それらをデータベースから再度取得したくない場合は、非表示フィールドに入れてみませんか?

@Html.HiddenFor(m => m.MyNonEditableField)

その後、POST でこれらの値への変更を単純に無視して、誰もこのデータに不正な変更を加えないようにすることができます。

これは、編集不可能なデータを POST アクションに渡す正規の方法です。ただし、このテーブルが許可しているよりも大きい場合は、データを再度取得しても問題はありません。

于 2013-09-02T09:21:17.583 に答える
0

正しく理解できたかどうかはわかりません。フォームを介して編集不可能なデータを渡したい場合は、次を使用できます。

@Html.HiddenFor(model => model.NonEditableFieldToBePassed)
于 2013-09-02T09:20:30.800 に答える
0

それを機能させることができました。これは私がしたことです:

@for (int i = 0; i < Model.Hours.Count(); i++)
            {
                <tr>
                    <td>@Model.Hours[i].CreatedBy @Html.HiddenFor(m => m.Hours[i].CreatedBy)</td>
                    <td>@Model.Hours[i].WorkingStart @Html.HiddenFor(m => m.Hours[i].WorkingStart)</td>
                    <td>@Model.Hours[i].HourComment @Html.HiddenFor(m => m.Hours[i].HourComment)</td>
                    <td>@Model.Hours[i].SecondsUsed @Html.HiddenFor(m => m.Hours[i].SecondsUsed)</td>
                </tr>
            }

正しい方向に向けてくれた Ant P に感謝します。

于 2013-09-02T10:31:01.147 に答える