设置
在 MVC 应用程序中,我有 2 个视图。引用_Layout 视图的主视图有一个“显示”按钮。然后我有另一个共享视图,它有一个剑道上传控件。上传视图不引用 _Layout 视图,但它位于共享文件夹中,因此我可以重复使用它。
要求 当用户单击主视图上的显示按钮时,我想在弹出窗口中显示上传视图。如果用户没有选择文件,则在弹出窗口上,那么我想在同一个弹出窗口上显示错误消息。
问题
当用户单击上传按钮而不选择文件时,模型会按预期发布到服务器以上传方法。在方法内部 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; }
}