带有MVC4内容的jQuery选项卡
我正在尝试在jQuery选项卡中显示一些MVC4视图。 这是我的代码:
问题是第一个标签内容显示正常 – 但第二个是空的。 似乎部分视图没有呈现。
有没有办法强制jQuery选项卡在加载页面时更新所有选项卡的内容,或者强制部分视图在页面加载时呈现?
这是我正在积极研究的代码,工作得很好:
Login.cshtml
@{ AjaxOptions optsLogin = new AjaxOptions { UpdateTargetId = "login-tab-login" }; AjaxOptions optsRegister = new AjaxOptions { UpdateTargetId = "login-tab-register" }; } @using (Ajax.BeginForm("Login", "Account", optsLogin, new { id = "form-login" })) { @Html.Partial("Account/_Login") } @using (Ajax.BeginForm("Register", "Account", optsRegister, new { id = "form-register" })) { @Html.Partial("Account/_Register") }
我的部分视图位于“帐户”子文件夹的“共享”文件夹中。 此外,每个局部视图都有自己的模型。 除此之外,实施并不特别……
UPDATE
我添加了代码来在两个选项卡上实现Ajax调用。 tabs部分上方的代码块包含两个
元素的AjaxOptions
对象。 您的控制器需要看起来像这样:
AccountController.cs
public class AccountController : Controller { ... [HttpGet] public ActionResult Login() { ... return View(); } [HttpPost] public ActionResult Login(LoginModel model) { ... if (ModelState.IsValid) return RedirectToAction("Index", "Home") else return PartialView("/Account/_Login", model); } [HttpPost] public ActionResult Register(RegisterModel model) { ... if (ModelState.IsValid) return RedirectToAction("Index", "Home") else return PartialView("/Account/_Register", model); } }
Login GET
操作方法呈现整个页面,包括_Layout.cshtml
和_ViewStart.cshtml
视图。 我的部分视图_Login.cshtml
和_Register.cshtml
包含输入表单的HTML元素。 每个局部视图都有自己的提交按钮:
因为每个部分视图调用都包含在它自己的using (Ajax.BeginForm(...))
块中,并且我已经为每个
赋予了它自己的id
属性,所以我可以添加JavaScript代码来劫持submit
事件。 根据按下的submit
,它将执行与Ajax.BeginForm(...)
调用中指定的操作和控制器关联的操作方法。 在我的情况下,如果表单数据通过validation,控制器将自动重定向到/Home/Index
。
但是,如果validation失败,则action方法将简单地将部分视图的呈现版本发送回浏览器,并将其放在与
关联的AjaxOptions
对象的UpdateTargetId
属性中指定的元素中。 由于默认的InsertionMode
是Replace
,因此视图引擎将简单地用新版本替换旧版本的部分视图,并填写表单数据和validation消息(如果包含)。
我没有包含的唯一与代码相关的项目是我的部分视图,就jQuery选项卡function而言,这并不重要。 我的部分视图中没有任何其他JavaScript,并且我没有包含的AccountController
的其他代码特定于调用我的外部Web API控制台应用程序和设置授权cookie。 我使用谷歌的CDN作为我的jQuery和jQuery UI声明,而不是在本地托管JavaScript。
你需要一段时间来围绕你必须做的事情。 但是,一旦你得到它,你就得到了它,知识可以转移。 这不是 WebForms,谢天谢地。