Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Asp.NETMVCAJAX和页面加载方面(视图)_Asp.net Mvc_Asp.net Ajax - Fatal编程技术网

Asp.net mvc Asp.NETMVCAJAX和页面加载方面(视图)

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实现这一目标的最佳方式是什么 谢谢使用只返回所需的的功

我现在运行了一个很好的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>