Asp.net mvc Asp.NETMVCAJAX和页面加载方面(视图)
我现在运行了一个很好的MVC应用程序,我正在添加一些AJax功能。我有一个表,其中显示10个项目,只有某些用户可以看到某些项目。当用户添加新帖子时,我已经设置了ajax来保存新条目 但是,我需要更新表,我无法从JQuery中找到用户的状态(因此他们可以看到什么),因此我不能插入新行(因为有些用户看不到该行)。如果这是web表单,我希望有一个转储表的页面,然后我将使用JQuery将经过修剪的“页面”的内容加载到当前页面上的相关插槽中 使用MVC实现这一目标的最佳方式是什么Asp.net mvc Asp.NETMVCAJAX和页面加载方面(视图),asp.net-mvc,asp.net-ajax,Asp.net Mvc,Asp.net Ajax,我现在运行了一个很好的MVC应用程序,我正在添加一些AJax功能。我有一个表,其中显示10个项目,只有某些用户可以看到某些项目。当用户添加新帖子时,我已经设置了ajax来保存新条目 但是,我需要更新表,我无法从JQuery中找到用户的状态(因此他们可以看到什么),因此我不能插入新行(因为有些用户看不到该行)。如果这是web表单,我希望有一个转储表的页面,然后我将使用JQuery将经过修剪的“页面”的内容加载到当前页面上的相关插槽中 使用MVC实现这一目标的最佳方式是什么 谢谢使用只返回所需的的功
谢谢使用只返回所需的
的功能。在您的主页中,它将被包括在内,但在您的Ajax调用中,它将只向客户端发送HTML,您可以使用HTML替换现有的
元素。如果我理解正确,您的意思是用户A正在查看条目列表,而用户B(可能在世界的其他地方)发布新条目。您希望更新用户A屏幕上的列表,但前提是新条目是允许用户A查看的条目
如果是这种情况,您可以在页面上运行一个计时器,当计时器触发时,它会导致对服务器的AJAX调用,询问用户是否有任何新条目。应该从会话中确定用户的身份以及他们可以看到的项目(具体的工作方式取决于您的特定体系结构,但我猜您已经在这样做了,以显示项目列表供用户A开始)
这里有各种各样的细节要考虑……/P>
这是一个相对简单的场景——也不是很少见——但需要以合理的方式进行处理,以防止出现复杂情况。添加一个cookie来存储用户的当前状态并不困难,或者,您可以简单地添加另一个Ajax调用,以确定用户是否获得授权。您只需在控制器中创建一些项来处理所有情况:用户是否获得授权,显示/隐藏什么
你到底需要什么?正如@Robert Koritnik所建议的,处理这个问题的最好方法是使用PartialView。我建议有两个单独的控制器操作——一个处理原始请求,另一个处理AJAX新条目。这两个操作都将调用相同的逻辑来获取表的数据。前者将数据与其他页面数据一起放入视图模型。后者将数据打包到局部视图的模型中 模型类
public class PageViewModel
{
....
public IEnumerable<TableViewModel> TableData { get; set; }
}
public class TableViewModel
{
...
}
视图代码
主视图
<% Html.RenderPartial( "TableView", model.TableData ); %>
<script type="text/javascript">
$('#entryForm').submit( function() {
$.post( '<%= Url.Action( "addentry", "controller" ) %>',
$('#entryForm').serialize(),
function(data) {
$('#table').replaceWith( data );
},
'html' );
return false;
});
</script>
$('#entryForm')。提交(函数(){
$.post(“”,
$('#entryForm')。序列化(),
功能(数据){
$(“#表”)。替换为(数据);
},
"html";;
返回false;
});
桌面视图
<table id="table">
<% foreach (var row in Model) { %>
<tr>
...
</tr>
<% } %>
</table>
...
您不能用类似于[authorize(Roles=“Admin”)的authorize标记来修饰控制器操作吗。只有此角色的用户才能插入行。JQuery可以调用controler方法。这似乎就是我要找的。然而,每当我尝试导航到一个局部视图时,我如何通过jqueryajax向页面添加一个局部视图呢。谢谢
<table id="table">
<% foreach (var row in Model) { %>
<tr>
...
</tr>
<% } %>
</table>