Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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中处理AJAX驱动的网站(大量视图和部分视图)?_Asp.net_Asp.net Mvc_Ajax - Fatal编程技术网

如何在asp.net MVC中处理AJAX驱动的网站(大量视图和部分视图)?

如何在asp.net MVC中处理AJAX驱动的网站(大量视图和部分视图)?,asp.net,asp.net-mvc,ajax,Asp.net,Asp.net Mvc,Ajax,我正在创建一个新网站,如果用户启用了javascript,它将使用AJAX来浏览页面内容 因此,我的情况是,每个操作方法都需要检查请求是否通过AJAX,这很简单。如果请求是通过AJAX的,那么我可以返回一个partialview,如果不是,那么可以返回一个完整视图 但是,使用这种模式,我需要为站点上的每个页面创建一个视图和一个PartialView。它们之间唯一真正的区别是包含母版页 我是不是错过了一个窍门?这是不是只有将视图加倍才能实现 谢谢 编辑-更多信息 假设我有一个可以通过/site/t

我正在创建一个新网站,如果用户启用了javascript,它将使用AJAX来浏览页面内容

因此,我的情况是,每个操作方法都需要检查请求是否通过AJAX,这很简单。如果请求是通过AJAX的,那么我可以返回一个partialview,如果不是,那么可以返回一个完整视图

但是,使用这种模式,我需要为站点上的每个页面创建一个视图和一个PartialView。它们之间唯一真正的区别是包含母版页

我是不是错过了一个窍门?这是不是只有将视图加倍才能实现

谢谢

编辑-更多信息

假设我有一个可以通过
/site/test
访问的页面。在我的JS中的某个地方,我会向url添加一个散列,如so
#/site/test
。JS随后将监视任何散列更改,并根据需要加载部分视图。如果JS不可用,则需要返回整个视图


因此,对于每个页面,我都需要视图,该视图将包含对RenderPartial的调用,该调用将加载实际包含页面内容的部分视图。因此,每个页面都有两个文件。看来应该有更干净的方法来做这件事。

塞吉奥,是的,你错过了一个窍门

你应该组织你的页面,使其中的静态内容就是静态的。然后,此静态页面调用提供动态内容的部分。这通常会在主页中使用(我现在使用jquery是根据微软在ajax上采用的立场):


我的头球
这意味着在初始请求中始终呈现部分。后续刷新将调用控制器中的partial方法,并沿以下行重新填充“dynmaicList”div:

<script type="text/javascript">
    // you might have a click or similar here to invoke the partial refresh
    $(function() {
         //click event (or some other 'change' event)
         $('#btnRefresh').click(function() {
             dynamicList();
         });
    });

    function dynamicList() {
        // where action/controller retruns a partialview result
        var url = '<%= Url.Action("List", "MyController") %>';
        // this is merely a wrapper method around jquery $ajax
        SendAjax(url, formParams(), beforedynamicListQuery, dynamicListResponse);
    }

    function beforedynamicListQuery() {
        $("#dynamicList").fadeTo('slow', 0.5);
    }

    function dynamicListResponse(data) {
        if (data.length != 0) {
            if (data.indexOf("ERROR:") >= 0) {
                $("#dynamicList_errmsg").html(data);
            }
            else {
                var selector = "#dynamicList";
                $(selector).fadeTo('slow', 1, function() {
                    $(this).html(data);
                });
            }
        }
    }
</script>

//您可以单击此处或类似按钮来调用部分刷新
$(函数(){
//单击事件(或其他“更改”事件)
$('#btnRefresh')。单击(函数(){
dynamicList();
});
});
函数dynamicList(){
//其中操作/控制器运行partialview结果
var url='';
//这只是jquery$ajax的包装方法
SendAjax(url,formParams(),beforedynamicListQuery,dynamicListResponse);
}
函数beforedynamicListQuery(){
美元(“#dynamicList”).fadeTo('slow',0.5);
}
函数动态响应(数据){
如果(data.length!=0){
if(data.indexOf(“错误:”)>=0){
$(“#dynamicList_errmsg”).html(数据);
}
否则{
变量选择器=“动态列表”;
$(选择器).fadeTo('slow',1,function(){
$(this).html(数据);
});
}
}
}

不管怎样,这就是我对它的看法!!;)

塞吉奥,是的,你错过了一个把戏

你应该组织你的页面,使其中的静态内容就是静态的。然后,此静态页面调用提供动态内容的部分。这通常会在主页中使用(我现在使用jquery是根据微软在ajax上采用的立场):


我的头球
这意味着在初始请求中始终呈现部分。后续刷新将调用控制器中的partial方法,并沿以下行重新填充“dynmaicList”div:

<script type="text/javascript">
    // you might have a click or similar here to invoke the partial refresh
    $(function() {
         //click event (or some other 'change' event)
         $('#btnRefresh').click(function() {
             dynamicList();
         });
    });

    function dynamicList() {
        // where action/controller retruns a partialview result
        var url = '<%= Url.Action("List", "MyController") %>';
        // this is merely a wrapper method around jquery $ajax
        SendAjax(url, formParams(), beforedynamicListQuery, dynamicListResponse);
    }

    function beforedynamicListQuery() {
        $("#dynamicList").fadeTo('slow', 0.5);
    }

    function dynamicListResponse(data) {
        if (data.length != 0) {
            if (data.indexOf("ERROR:") >= 0) {
                $("#dynamicList_errmsg").html(data);
            }
            else {
                var selector = "#dynamicList";
                $(selector).fadeTo('slow', 1, function() {
                    $(this).html(data);
                });
            }
        }
    }
</script>

//您可以单击此处或类似按钮来调用部分刷新
$(函数(){
//单击事件(或其他“更改”事件)
$('#btnRefresh')。单击(函数(){
dynamicList();
});
});
函数dynamicList(){
//其中操作/控制器运行partialview结果
var url='';
//这只是jquery$ajax的包装方法
SendAjax(url,formParams(),beforedynamicListQuery,dynamicListResponse);
}
函数beforedynamicListQuery(){
美元(“#dynamicList”).fadeTo('slow',0.5);
}
函数动态响应(数据){
如果(data.length!=0){
if(data.indexOf(“错误:”)>=0){
$(“#dynamicList_errmsg”).html(数据);
}
否则{
变量选择器=“动态列表”;
$(选择器).fadeTo('slow',1,function(){
$(this).html(数据);
});
}
}
}

不管怎样,这就是我对它的看法!!;)

塞吉奥-我认为你需要冷静思考,当然,在这方面,你应该把你潜在的“谨慎”的部分分解到最有意义的最小水平。这意味着你也可以从这些部分中得到更好的重用。sergio-我实际上认为你需要冷静地思考这一点,当然,在这方面,你应该将你潜在的“谨慎”部分分解到有意义的最小级别。这意味着您也可以从这些部分中获得更好的重用。谢谢您的精彩回复。它帮助我更好地理解了与AJAX相关的部分工作方式。我想我可能不得不采取加倍的方式,对每一页都有一个视图和部分视图。我确实读到过,创建一个基本为空的母版页是可能的,如果请求是AJAX,则使用该母版页而不是普通母版页进行渲染。我的视图文件夹结构基本上是:索引、列表、创建、编辑、详细信息。列表的使用方式与上面在索引页中描述的完全相同,如果其他“对象”具有此“类型”的列表(我使用的是强类型模型)来显示,则使用此列表。将重用保持在最大程度,将编码保持在最小程度Jim-没问题。经常