2012-08-10 28 views
3

我正在开发一个MVC3应用程序与EF和我想使用户界面流利用jQuery AJAX,用户将能够通过URL浏览,如果他知道它或者他可能会收到指向特定路线的链接,但是,一旦页面完全加载,它需要流利,所以我想出了一个想法,我想在这里讨论它,然后再对解决方案进行更改。MVC&ajax:我应该创建更多视图吗?

这里是我想出了:

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请求来执行实际工作,但没有路由/操作链接。

现在应用程序按预期工作,但现在我遇到了一些问题:有需要成为ActionResult和PartialViewResult的视图,这是因为用户可以输入url:“/ Admin/Test”,应该返回整个页面,或者可以点击一个只加载“/ Admin/Test”内容并显示它的锚点。为了避免着名的页面内页错误,我写了一个function来发送请求,并且当请求到达时,它只选择我需要的内容,避免页面内部的页面和重复的视图,但是响应是整个页面,我不需要说,它不是最好的选择,但是由于应用程序将被lan使用,我并不在乎过多的响应负载,但是随后我需要在视图中编写JavaScript代码,所以我的解决方案就像null,因为使用jQuery选择器只得到我需要的JavaScript不在那里。

至于我的新的解决方案来解决我的最后的解决方案: 我以为是我可能会离开原来的观点,并创建另一个鉴于原名称后附加词“部分”,与控制器创建另一个方法相同的命名约定,并将新路线添加到我的路线表中。

为了包装起来,我需要的是: - 如果用户输入“/ Test”,响应应该是整个页面,像过去一样加载,屏幕闪烁白色等等。 - 但是,如果用户单击导航栏中的测试链接,则响应应该是异步的,并且只刷新我的布局的内容。

任何想法?想法?建议?

+0

我认为这是一个属性,只允许通过juery或任何访问的方法,类似于如何'[发布]'的作品,然后你可以有控制器内的两种不同的方法,一种只接受jquery,返回一个局部视图,另一个是全视图。 – 2012-08-10 18:28:13

回答

2

在你actionmethod你可以有

if (Request.IsAjaxRequest()) 
     return PartialView("_somePartialView"); 
else 
     return PartialView("_someOtherPartialView"); 
+0

并不是我寻找的答案,但它帮助我解决了创建某些视图的问题。 +1让我记住'IsAjaxRequest'。 – Esteban 2012-08-23 16:10:07

相关问题