3

私はここ数日、mvcフォームとjqueryを試してきましたが、いくつかの興味深い結果が見つかりました。

ビューにファイルをアップロードしたフォームがあります。フォームが送信されたら、モデル検証を使用して、ファイルが空でないこと、ファイルが許可されたタイプであることなどを確認します。モデル検証が失敗した場合は、モデルをビュー(同じビュー)に戻し、エラーを表示できます。検証の要約で非常にうまく。これが私のコードです:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

   @using (Html.BeginForm("TestView", "TestController", FormMethod.Post, new { enctype = "multipart/form-data",  @id = "ImportFile"}))
    {    @Html.ValidationSummary(false, "")

        <span id="instructions">Select a File to Import:</span><br />           
        @Html.TextBoxFor(model => Model.UploadedFile, new { style = "width:275px;", type = "file", @id = "UploadedFile", @name = "UploadedFile" })
                @Html.ValidationMessageFor(model => Model.UploadedFile)
        <span style="font-size: 8pt">@Html.CheckBoxFor(model => Model.HeadersIncluded)
            First Column Includes Headers?</span>
        <p style="margin-bottom: 7px;">
            <input type="submit" name="launchbutton" value="Continue" class="InnerButton"/></p>
    } 
<div id="UploadPartial"></div>

と私のコントローラーメソッドはここにあります:

    [AcceptVerbs("GET")]
    public ActionResult TestView()
    {
        TestViewModel testModel = new TestViewModel();
        testModel.HeadersIncluded = true;
        return View(testModel);
    }

    [AcceptVerbs("POST")]
    public ActionResult TestView(TestViewModel model)
    {
        if (!ModelState.IsValid)
        {
             return View(model);
       }
        else
        {
             return View(model);
        }
    }

それで、すべてが順調であり、モデルが有効であるかどうかにかかわらず、元のフォームは(検証エラーを除いて)邪魔されず、jqueryの投稿で同じページに部分的なビューをロードすることができました。これ:

$(document).ready(function () {
    $('#UploadPartial').load('@Url.Content("~/TestController/TestView2")', function() {
    });     

つまり、モデルが有効な場合は、別の追加の部分ビューをロードします。

それで、私は疑問に思いました、モーダルダイアログ内でこれを行うことができますか?つまり、フォームをモーダルダイアログで開いて送信し、モデルの検証を実行してから、結果をモーダルダイアログに返すことができますか。。。

モデルが検証されると、結果は空白のページに戻されます。レイアウトもスクリプトファイルもありません。フォームを含む空白のページだけです(存在する場合は検証エラーがあります)。View、PartialViewを返し、ビューのレイアウトを変更し、必要なスクリプトファイルを追加するなどしてみました。同じフォームコードを使用します(ただし、ダイアログ内から)。送信後、モデルの検証が行われることがわかります。モデルの検証が成功したかどうかにかかわらず、次のステップ(別のビューをロードします)。そのための私のコントローラーコードは次のとおりです。

    [AcceptVerbs("GET")]
    public ActionResult TestView()
    {
        TestViewModel testModel = new TestViewModel();
        testModel.HeadersIncluded = true;
        return PartialView(testModel);
    }

    [AcceptVerbs("POST")]
    public ActionResult TestView(TestViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return PartialView("TestView", model);

        }
        else
        {
             return PartialView(model);
        }
    }

部分ビュー、ビューを返し、ActionResultをPartialViewResultに変更しようとしましたが、現在の部分ビューをフォームが含まれているモーダルダイアログに戻すことができません。部分ビューが返されますが、空白のページに戻ります。必要なモーダルダイアログの代わりに、フォーマットはありません。モーダルダイアログが消え、すべてのサイトがそれを使用してフォーマットされているようです。

だから私の質問は、これも可能ですか?モーダルダイアログ内でフォームを送信し、そのフォーム送信の結果を同じダイアログに戻し(モデルの検証が実行された後)、さらにjqueryを処理するために必要なスクリプトファイルを使用してサイトをフォーマットできますか? 。

ありがとうございます。追加情報が必要な場合はお知らせください。

4

1 に答える 1

0

私は通常、ダイアログ div 内にコンテンツ div を持ち、jQuery に部分ビューからコンテンツ div を入力させます。

UpdateTargetId を content div に設定して Ajax.BeginForm ヘルパーを使用することもできます。

フォームが jQuery ダイアログ内にある場合のもう 1 つの問題は、コンテンツが Ajax 経由で更新された後に検証を再トリガーする必要があることです。$.validator.unobtrusive.parse("form"); のようなもの

于 2013-01-08T07:39:11.320 に答える