我使用asp.net mvc5。我在网站的右侧面板(布局)创建一个菜单。当用户点击菜单项时,加载页面没有刷新页面。为了做到这一点,我使用Ajax.ActionLink
。
<aside class="right-panel flexcol">
<button class="accordion">Hotels</button>
<div class="sub-panel flexcol">
@Ajax.ActionLink("View Hotels", "Index", "Hotel", null, new AjaxOptions { HttpMethod = "get", UpdateTargetId = "pageContent" }, new { @class = "sub-menu" })
@Ajax.ActionLink("HotelType", "Index", "HotelType", null, new AjaxOptions { HttpMethod = "get", UpdateTargetId = "pageContent" }, new { @class = "sub-menu" })
</div>
并且对于呼叫'新酒店'页面,我使用
@Ajax.ActionLink("Create Hotel", "Create", "Hotel", null, new AjaxOptions { HttpMethod = "get", UpdateTargetId = "pageContent" }, new { @class = "bluelink" })
这些工作正常。 问题:当我提交创建页面时,此页面发送到控制器,如果模型填写无效数据,页面重定向到没有布局和css的创建页面。
@model ... Models.Hotel
@{
ViewBag.Title = "Create";
Layout =null;
}
控制器
public ActionResult Create()
{
return PartialView();
}
[HttpPost]
public ActionResult Create(Hotel model)
{
if (!ModelState.IsValid)
{
return PartialView(model);
}
ApplyToDataBase(model, "uspInsertHotel");
return RedirectToAction("Index");
}
答案 0 :(得分:1)
在我看来,问题在于,在模型无效的情况下返回局部视图,这不是ajax调用。我可以提出几种选择,希望他们能提供帮助。
首先,您可以返回不是局部视图,而是返回该情况下的整个视图。它可能不是一个非常优雅的解决方案,它可能会导致视图重复。
另一种方法 - 使用客户端验证,因此您无需进行服务器调用即可验证输入。在这种情况下,您可能需要使用jQuery验证插件。