当前位置:编程学习 > C#/ASP.NET >>

MVC下关于使用$get()方法获取view中数据的方法?急,在线等,谢谢

大概是这么个练习,FusionCharts 是个用flash 显示数据图表的插件,能用很简单的js代码实现 
如下所示:
 
function Render() {
        var Flash11 = new FusionCharts("加载的flash的URL", "ID", "长", "宽");
        Flash11.setDataXML(xml数据);
        Flash11.render("div的id");
    }

现在MVC里要实现这个过程 并且要在models里建立模型 把一串数据传递到前台显示出来,我也不啰嗦,主要也说不清楚,上代码吧
../Models/Chart.cs

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace DemoCharts.Models
{
    public class Chartxml
    {
        public string Chart { get; private set; }

        public Chartxml(string strChart)
        {
            Chart = strChart;
        }
    }
}


../Controllers/HomeController.cs
我就把相关联的发上来 其他的都是自动生成的。

       public ActionResult Main()
        {
            return View();
        }

        public ActionResult Fusion()
        {

            string strChart = "<graph caption='Degree of monthly sales Column' xAxisName='Month' " +
                          "yAxisName='Units' showName='1' decimalPrecision='0' formatNumberScale='0' HoverCaption='hhaha'>" +
                        "<set name='January' value='462' color='AFD8F8'  hoverText='JanTest'/>" +
                        "<set name='February' value='857' color='F6BD0F' hoverText='FebTest'/>" +
                        "<set name='March' value='671' color='8BBA00' hoverText='MarTest'/>" +
                        "<set name='April' value='494' color='FF8E46'  hoverText='AprTest'/>" +
                        "<set name='May' value='761' color='008E8E' hoverText='MayTest'/>" +
                        "<set name='June' value='960' color='D64646'  hoverText='JunTest'/>" +
                        "<set name='July' value='629' color='8E468E' hoverText='JulTest'/>" +
                        "<set name='August'  value='622' color='588526' hoverText='AugTest'/>" +
                        "<set name='September' value='376' color='B3A00' hoverText='SepTest'/>" +
                        "<set name='October'  value='494' color='008ED6' hoverText='OctTest'/>" +
                        "<set name='November' value='761' color='9D080D' hoverText='NovTest'/>" +
                        "<set name='December' value='960' color='A186BE' hoverText='DecTest'/>" +
                    "</graph>";
            Chartxml chartxml = new  Chartxml(strChart);
           
           
           return PartialView("Fusion", chartxml);

        }


上面的controlreturn了两个view 其中一个Fusion是partial view

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DemoCharts.Models.Chartxml>" %>
<%=Html.Hidden("chartXML", Model.Chart) %>


然后在另外一个view里调用这里这个chartXML,我先用的Ajaxlink方法,已经实现,代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DemoCharts.Models.Chartxml>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Fusion charts
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="../../Scripts/MicrosoftMvcAjax.js"></script>
    <script type="text/javascript" src="../../Scripts/jquery-1.3.2.min.js"></script>

    <%=Ajax.ActionLink("hahaha", "Fusion", "Home", null, new AjaxOptions { UpdateTargetId = "placeholder", OnSuccess = "Render" })%>
<div id="placeholder"></div>

<script src="../../Scripts/FusionCharts.js" type="text/javascript"></script>

<script type="text/javascript">
    var chart;

    function Render() {
        var Flash11 = new FusionCharts("../../Content/Column3D.swf", "FlashColumn3D1", "500", "600");
        Flash11.setDataXML($("#chartXML").val());
        Flash11.render("placeholder");
    }

</script>

以上的操作我都已经实现了 , 下面boss让我用Jquery的get方法去实现上面的操作。
同样在main这个view底下,我增加了点代码,可惜就是不成功,希望有人能帮我做一个分析和解答,谢谢
我增加的错误代码:

    <a id="TRYJquery" href="">Way2</a>
<script type="text/javascript">
    $(function() {
        $("#TRYJquery").click(function() {
        $.get("Fusion.ascx", { dataxml: $("#chartXML").val() },
                function(data, textStatus) {
                    var Flash = new FusionCharts("../../Content/Column3D.swf", "FlashColumn3D1", "500", "600");
                    Flash.setDataXML("dataxml");
                    Flash.render("placeholder");
                })
        })
    })

</script>

--------------------编程问答-------------------- 没仔细看, 不过给 Jquery控制的那段+上form 呢? 有可能使这个原因吗? --------------------编程问答-------------------- 我觉得你请求的地址不对。。。总觉得你应该去请求/Home/Fusion。。
并且$.get再加一个参数吧,第四个参数"xml"
然后Controller中的Fusion返回时写:
return this.xml(new xml{strChart转xml});

不知道我理解的对不对。 --------------------编程问答-------------------- 我试试吧,死马当做活马医了。 --------------------编程问答-------------------- 不对啊 ,不过还是谢谢了 朋友 --------------------编程问答-------------------- 1.Fusion方法可直接返回 string 或者xml  如:public String Fusion();
2.$.get地址不对,应该是/Home/Fusion;
3.<a>标签click事件要return false,否则会刷新页面;

代码


 public String Fusion()
        {

            string strChart = "<graph caption='Degree of monthly sales Column' xAxisName='Month' " +
                          "yAxisName='Units' showName='1' decimalPrecision='0' formatNumberScale='0' HoverCaption='hhaha'>" +
                        "<set name='January' value='462' color='AFD8F8'  hoverText='JanTest'/>" +
                        "<set name='February' value='857' color='F6BD0F' hoverText='FebTest'/>" +
                        "<set name='March'    value='671' color='8BBA00' hoverText='MarTest'/>" +
                        "<set name='April'    value='494' color='FF8E46'  hoverText='AprTest'/>" +
                        "<set name='May'        value='761' color='008E8E' hoverText='MayTest'/>" +
                        "<set name='June'    value='960' color='D64646'  hoverText='JunTest'/>" +
                        "<set name='July'    value='629' color='8E468E' hoverText='JulTest'/>" +
                        "<set name='August'  value='622' color='588526' hoverText='AugTest'/>" +
                        "<set name='September' value='376' color='B3A00' hoverText='SepTest'/>" +
                        "<set name='October'  value='494' color='008ED6' hoverText='OctTest'/>" +
                        "<set name='November' value='761' color='9D080D' hoverText='NovTest'/>" +
                        "<set name='December' value='960' color='A186BE' hoverText='DecTest'/>" +
                    "</graph>";
           return strChart ;

        }


    
<script type="text/javascript">
    $(function() {
        $("#TRYJquery").click(function() {
        $.get("/Home/Fusion",
                function(data) {
                    var Flash = new FusionCharts("../../Content/Column3D.swf", "FlashColumn3D1", "500", "600");
                    Flash.setDataXML(data);
                    Flash.render("placeholder");
                })
        })
    })

</script>

--------------------编程问答-------------------- 上面JS少写了return false;
<script type="text/javascript">
    $(function() {
        $("#TRYJquery").click(function() {
        $.get("/Home/Fusion",
                function(data) {
                    var Flash = new FusionCharts("../../Content/Column3D.swf", "FlashColumn3D1", "500", "600");
                    Flash.setDataXML(data);
                    Flash.render("placeholder");
                });
        });
        return false;
    });

</script>
--------------------编程问答-------------------- 楼上给的方法是对的 谢谢提醒return false;
可是在下有个以为 如果你直接return strChart了  那我的那个view 里的fusion又有什么意义了呢 ?  这不背离老师给的需求了吗 ? --------------------编程问答--------------------
引用 7 楼 rainlonely 的回复:
楼上给的方法是对的 谢谢提醒return false;
可是在下有个以为 如果你直接return strChart了 那我的那个view 里的fusion又有什么意义了呢 ? 这不背离老师给的需求了吗 ?


View不需要,你这里需要的只是数据,因此直接在C里返回数据就行了;
需求方面,由于不清楚有什么具体要求,所以无法谈背不背离。 --------------------编程问答-------------------- mark!马上使用MVC做项目,学习中...
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,