3

セットアップ
MVC アプリには 2 つのビューがあります。_Layoutビューを参照しているメインビューには、「表示」ボタンがあります。次に、剣道のアップロード コントロールを持つ別の共有ビューがあります。アップロード ビューは _Layout ビューを参照していませんが、共有フォルダーにあるため、再利用できます。

要件 ユーザーがメイン ビューの [表示] ボタンをクリックすると、ポップアップ ウィンドウに [アップロード] ビューを表示したい。ユーザーがファイルを選択しない場合のポップアップ ウィンドウで、同じポップアップ ウィンドウにエラー メッセージを表示したい。

問題
ユーザーがファイルを選択せず​​に [アップロード] ボタンをクリックすると、モデルがサーバーにポストされ、期待どおり Upload メソッドに送信されます。メソッド内 if

ModelState.IsValid == false

、同じアップロードビューに戻ります。しかし、その後エラーが発生します

0x800a1391 - JavaScript ランタイム エラー: 'jQuery' は定義されていません。

これで、IE エラー ウィンドウで続行を押し続けることができます。最終的にアップロード ビューが表示され、ValidationSummary でエラーが表示されますが、ポップアップとして表示されず、プレーンな html ページとしてレンダリングされます。

以下は私のコードです

メインビュー

@model MainModel

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<script>
    $(document).ready(function () {
        var uploadwindow = $("#uploadwindow");

        $("#btnShow").click(function (e) {
            uploadwindow.data("kendoWindow")
                .open()
                .center();
        });

    });
</script>

<button type="button" class="btn btn-default" id="btnShow">Show</button>

@(Html.Kendo().Window()
.Name("uploadwindow")
.Title("Select the files to upload")
.Width(600)
.Modal(true)
.Visible(false)
.LoadContentFrom("Upload", "Main")
)

アップロード ビュー

@model UploadModel
@using (Html.BeginForm("Upload", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary()
    @(Html.Kendo().Upload().Name("files"))
    <button type="submit">Upload</button>
}

public class MainController : Controller
    {
        public ActionResult Index()
        {
            MainModel model = new MainModel()
            return View(model);
        }

        public ActionResult Upload()
        {
            UploadModel model = new UploadModel();
            return View(model);
        }

        [HttpPost]
        public ActionResult Upload (UploadModel model)
        {
            if (ModelState.IsValid == false)
            {
               //I want stay on the same Upload view to show error messages
		 //Here I get JQuery exception when model is not valid
                return View(model); 
            }
            else
            {
		       // Do something here and Close the POPUP Window
            }
        }
    }

    public class UploadModel
    {
        [Required(ErrorMessage = "Please click the browse button and select a file.")]    
        public IEnumerable<HttpPostedFileBase> Files { get; set; }     
    }

4

0 に答える 0