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 ;
}
--------------------编程问答-------------------- 上面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");
})
})
})
</script>
<script type="text/javascript">--------------------编程问答-------------------- 楼上给的方法是对的 谢谢提醒return false;
$(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 strChart了 那我的那个view 里的fusion又有什么意义了呢 ? 这不背离老师给的需求了吗 ? --------------------编程问答--------------------
View不需要,你这里需要的只是数据,因此直接在C里返回数据就行了;
需求方面,由于不清楚有什么具体要求,所以无法谈背不背离。 --------------------编程问答-------------------- mark!马上使用MVC做项目,学习中...
补充:.NET技术 , ASP.NET