我正在使用EF开发一个MVC3应用程序,我希望使用jQuery ajax使UI流畅,用户将能够浏览网址,如果他知道或者他可能会收到指向特定链接的链接路由,但是,一旦页面完全加载,它需要流畅,所以我提出了一个想法,我想在此之前讨论它,然后才对解决方案进行更改。
以下是我提出的建议:
TestController.cs(为简单起见,省略了方法代码)
public ActionResult Index() { ... }
public ActionResult Create() { ... }
[HttpPost]
public ActionResult Create(Test test) { ... }
public ActionResult Update(int testID) { ... }
[HttpPost]
public ActionResult Update(Test test) { ... }
public ActionResult Delete(int testID) { ... }
[HttpPost]
public ActionResult Delete(Test test) { ... }
到目前为止它看起来像大多数控制器。我的意见如下:
Views\Test\List.cshtml
Views\Test\Create.cshtml
Views\Test\Details.cshtml
Views\Test\Delete.cshtml
现在因为我想做异步:我已经改变了我的列表视图,所以我可以添加,修改和删除列表,到目前为止工作就像一个魅力。此外,用户仍然可以使用url浏览应用程序,请注意,应用程序内的每个链接都会执行ajax请求来执行实际工作,没有Route / Action链接。
到目前为止,应用程序正在按预期工作,但现在我遇到了一些问题:有些视图我需要成为ActionResult和PartialViewResult,这是因为用户可以键入url:“/ Admin / Test”,应该返回完整页面,或者可以单击一个锚点,该锚点仅加载“/ Admin / Test”的内容并显示它。为了避免着名页面内页错误,我写了一个function来发送请求,当请求到达时,它只选择我需要的东西,避开页面内页,并复制视图,但是,响应是整个页面,我不需要说,它不是最好的选择,但由于应用程序将由lan使用我不太关心响应的有效负载,但后来我需要编写javascript代码在视图中,所以我的解决方案就像null一样,因为使用jQuery选择器只能得到我需要的javascript不存在。
至于解决我上一个解决方案的新解决方案: 我想我可能会保留原始视图,并创建另一个视图,在原始名称后添加“Partial”一词,在控制器中创建另一个具有相同命名约定的方法,并将新路由添加到我的路由表中。
总结一下,我需要的是以下内容: - 如果用户键入“/ Test”,则响应应该是整个页面,像旧时一样加载,屏幕闪烁白色等。 - 但是,如果用户单击导航栏中的“测试”链接,则响应应为异步并仅刷新布局的内容。
有什么想法吗?想法?建议?
答案 0 :(得分:2)
在你的行动方法中你可以拥有
if (Request.IsAjaxRequest())
return PartialView("_somePartialView");
else
return PartialView("_someOtherPartialView");