新足迹

 找回密码
 注册

精华好帖回顾

· 大家一起来讨论,找出最适合自己孩子的管教方法(所有年龄段) (2010-2-16) 第一名 · Dodge Journey 感受 (2013-8-21) ndyzzlj
· 【几张人像】 (2013-7-11) 薰衣 · 浪迹天涯忆旧游--讲讲故事吧 (2007-8-24) vivian2006
Advertisement
Advertisement
查看: 1624|回复: 22

有没有办法干这个事 [复制链接]

头像被屏蔽

禁止发言

发表于 2011-7-26 15:12 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
在asp.net mvc的controller里面获得partialview的最终html
然后把它当作string返回,同时返回的还有一个bool,表示处理正确还是错误。
如果错误,那么那个string会是错误信息。

这样在js里面,如果错误,就alert.如果正确,就把partial view的html
替换某个节点。

google了一下,木有。
Advertisement
Advertisement

特殊贡献奖章

发表于 2011-7-26 15:16 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不懂.net

我感觉可以传个json数组
一个部分是html, 另一个部分是bool
头像被屏蔽

禁止访问

发表于 2011-7-26 15:25 |显示全部楼层

感觉思路比较怪异。为何要这么做??

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整
头像被屏蔽

禁止发言

发表于 2011-7-26 15:41 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本来ajax调服务器端,返回partialview,然后替换本地某个节点。如果错误就啥都不干。

但是后来加入了一些特殊的逻辑,所以会需要提示用户错误。我又不想js和服务器写2份验证。

这样我需要返回一个json, 带3个值: iserror, errormsg, html

特殊贡献奖章

发表于 2011-7-26 15:44 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我经常干这个事
通过json传一堆东西,其中有个值叫message。如果message不为空就alert message,程序终止。

不知道这样做有神马弊端
头像被屏蔽

禁止发言

发表于 2011-7-26 15:52 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
恩,我不知道的是如何把partialview搞成string
Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2011-7-26 16:11 |显示全部楼层

这个呢?

此文章由 atransformer 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 atransformer 所有!转贴必须注明作者、出处和本声明,并保持内容完整

2010年度奖章获得者

发表于 2011-7-26 16:12 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
第一感觉就是 that's a bad practice.

mvc3 里有unobtrusive validation, logic服务端写一次,客户端自动生成。
http://lucbei.wordpress.com/2010 ... ml5-in-razor-rocks/

如果真要这么做的话,吧那个user control(partial view),上面只写一个pure string有server动态生成,或则把这个parial view i/o 读进来,处理后塞给controller 返回到view。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载

发表于 2011-7-26 16:13 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
controller function
public string r_table(){
if(0==0){
   return "<table><tr><td>ddddd</td></tr></table>"
}
else{
return"error";
}
}



javascript call:

div.load("xxxx/r_table")

-------------
That's all you need

2010年度奖章获得者

发表于 2011-7-26 16:18 |显示全部楼层

回复 典 9# 帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
难看,且慢
头像被屏蔽

禁止发言

发表于 2011-7-26 16:31 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
>或则把这个parial view i/o 读进来,处理后塞给controller 返回到
>view。

Render partial view to string in ASP.NET MVC
就是这个。
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2011-7-26 16:32 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
太麻烦了。我还是判断开始是不是"error",来判断是错还是对。
还是用我的老办法方便。

发表于 2011-7-26 16:37 |显示全部楼层
此文章由 Dan.and.Andy 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Dan.and.Andy 所有!转贴必须注明作者、出处和本声明,并保持内容完整
public JsonResult ta()
{
    return Json(new { rtn = PartialView("你的view", 你的model).ToString() }, JsonRequestBehavior.AllowGet);
}

没检验,你看看paritalview是不是搞成了string

发表于 2011-7-26 18:48 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
个人理解,
LZ你这个问题容易让人崩溃,
1)一般情况下,view or partialview本来就是静态的东西,对服务器来讲,已经是最后一步了,如果你有什么error info或者其他逻辑,应该在此之前就处理好,可以把error msg通过viewbag传到view(或者partial view)
2) "partialview有错" 在一般情况下是个伪命题,只有浏览器才知道一个view/partialview是否有错,如果你在view里有嵌套逻辑(比如call 其它c# code),那也应该在view里处理好error,
3)从浏览器的角度看,partialview其实就是一字符串,

[ 本帖最后由 典 于 2011-7-26 18:07 编辑 ]

评分

参与人数 1积分 +3 收起 理由
linkspeed + 3 谢谢奉献

查看全部评分

发表于 2011-7-26 18:52 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这个approach无论从serverside还是client side,违反了single responsibility principle,不建议用。

评分

参与人数 1积分 +6 收起 理由
denisezhang + 6

查看全部评分

发表于 2011-7-26 23:34 |显示全部楼层
此文章由 huazhb 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 huazhb 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你这个思路还真的有人实现过, 就是大名鼎鼎老赵。不过他是在ASP,Net Web Form 下用Usercontrol 实现的。 可以参考一下。 http://blog.zhaojie.me/2007/12/usercontrol-as-an-template.html 在MVC中,你还是用ajax获取数据, 然后用客户端的Template来动态加载UI比较好。

评分

参与人数 1积分 +3 收起 理由
linkspeed + 3 谢谢奉献

查看全部评分

Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2011-7-27 10:27 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
>"partialview有错" 在一般情况下是个伪命题,

不是partial view有错。是ajax调用返回的可能是2个结果
1. 错误信息
2. 正确执行后的HTML,但是这个HTML是由partialview
渲染得到的。

我的问题是如何比较好的返回这2种结果。

最好的解决办法是“mvc3 里有unobtrusive validation, logic服务端写一次,客户端自动生成。”

我现在的办法是返回都是字符串,然后根据头几个字符来判断是错误信息还是正确的html,感觉有点粗糙。

发表于 2011-7-27 11:08 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我这里有个这样的的实现不知道满足你的要求不,(是写在我们的production里边的)
1) 主view里边用这样的方式调用partialview ,(也可以用ajax调用)
<%= Html.Action("partial_view_call","Home") %>

2) 上面partial_view_call是一个controller function,
error_view 是产品里的一个标准error view (partial),提供系列系列标准error信息,
PartialView_Product 是一个真正需要的view,用来share/cache 输出

public PartialViewResult partial_view_call()
{
            if (0 == 1)
            {
                return PartialView("PartialView_Product");
            }
            else
            {
              ViewBag.Time=....
               ...
                return PartialView("error_view");
            }
}

[ 本帖最后由 典 于 2011-7-27 10:12 编辑 ]

评分

参与人数 1积分 +3 收起 理由
linkspeed + 3 谢谢奉献

查看全部评分

头像被屏蔽

禁止发言

发表于 2011-7-27 11:50 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你的ajax里面怎么知道是哪个view返回了?

发表于 2011-7-27 12:24 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我觉得已经足够了,如果要进一步,你可以在客户端分析一下返回值,不用多说,你try一下就会明白
        $.ajax({
            type: "POST",
            url: '<%=Url.Action("partial_view_call","home","0" )   %>',
            cache: false,
            success: function (msg) {
                document.getElementById("div").innerHTML = msg;
                alert(msg);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('an error occurred!  XHR status: ' + xhr.status + " ; Error:" + thrownError);
            }
        });
头像被屏蔽

禁止发言

发表于 2011-7-27 12:32 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
> error: function (xhr, ajaxOptions, thrownError) {

哦。这个我一直忽视了。如果没有网络超时什么的,
怎么能让ajax调用到error?
服务器端都是partialview啊。
Advertisement
Advertisement

发表于 2011-7-27 12:38 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
好吧我再详细点
success: function (msg) {
              if(this msg string has "linkspeed error"){
                    alert("I got the error partial view");
              }
            else {
                    alert("I got the right parital view");

                 document.getElementById("div").innerHTML = msg;
             }
},
头像被屏蔽

禁止发言

发表于 2011-7-27 13:01 |显示全部楼层
此文章由 linkspeed 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 linkspeed 所有!转贴必须注明作者、出处和本声明,并保持内容完整
> if(this msg string has "linkspeed error")

那跟我的办法也是一样。区别是你把错误信息也弄成partialview了。最后还是通过查询字符来判断

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部